这里真的很困惑......
设置一个带死信道具的队列......
var amqp = require('amqp'),
conn = amqp.createConnection();
var key = "batch.delay." + (new Date().getTime()).toString();
var options = {
arguments: {
"x-dead-letter-exchange": "immediate",
"x-message-ttl": 30000,
"x-expires": 40000,
"x-dead-letter-routing-key": 'hit.api'
}
};
conn.queue(key, options);
并定义实际的交换......
conn.exchange('immediate', {
durable: true,
autoDelete: false,
type: 'direct'
}, function (exchange) {
// other thing...
});
问题是所有流量都是通过默认交换而不是死信交换。 ttl道具正在受到尊重,但不是交换名称。这是在这里看到的......
想法?
编辑:
在下面的中,您可以看到创建的队列,一旦到期,就会漏入DLX。
答案 0 :(得分:0)
上面的示例使用路由密钥设置DLX,这很好,但您需要指定一个接受该路由密钥的死信队列。
如果您不需要路由密钥,我建议您使用扇出交换机。我在这里发布了一个答案:
答案 1 :(得分:0)
问题在于您尝试在每条消息的基础上设置x-dead-letter-exchange。在整个队列上设置DLX。您可以看到您的队列上没有DLX,如果有,它会有一个DLX图标,如下图所示。
然后将x-dead-letter-routing-key添加到各个消息中。
x-expire也是队列级别设置与消息级别设置。
答案 2 :(得分:0)
好的,所以..就是这样:
这是一个范围问题......我想我正在循环发布到即将到期的队列的数据,但数据总是一个空数组,因此没有发布任何内容。
一旦我弄明白这一点,队列将填充数据,到达DLX,绑定到DLX的队列将获取数据。
非常感谢@jhilden和我说话。