我正在尝试实现一个rabbitmq延迟消息队列(没有插件)。我正经历着一些奇怪的问题。以下是我当前的设置(不是实际名称,顺便说一句)
1交易所“交易所”
两个队列:最终目标队列“队列”和延迟队列“延迟”
这两个队列都绑定到"Exchange“。
以下是我如何发布这条信息
err := confirmModeChannel.Publish(
"Exchange", // exchange
"Delayed", // routing key
false, // mandatory
false,
amqp.Publishing{
Body: payload,
Expiration: expiration,
})(已处理发布确认,但此处未显示)
以及延迟信道的定义
channel.QueueDeclare(
"Delayed", // name
true, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
map[string]interface{}{
"x-dead-letter-exchange": "Exchange",
"x-dead-letter-routing-key": "Queue"
}, // arguments
)以及它与交换的关系
channel.QueueBind(
"Delayed", // queue name
"Delayed", // routing key
"Exchange", // exchange
false,
nil,
)交易所被正确地定义为“直接”。
问题是,如果我使用“队列”,并将一些消息发布到“延迟”,则消息到达的顺序与发送的顺序相同,但延迟到最大过期时间。例如
send message 1 with 3s delay
send message 2 with 1s delay在3s之后,它们就被送到了
received message 1 at [timestamp1]
received message 2 at [timestamp2]timestamp1和timestamp2几乎一样(有些纳秒不同),我不知道我在哪里搞砸了?我希望这些信息会按这个顺序到达。
received message 2 at [timestamp2]
received message 1 at [timestamp1]timestamp2与timestamp1的距离约为2s。
我在用
运行在1.14
发布于 2021-10-25 15:11:45
FIFO
消息2的传递等待消息1的传递(尽管延迟较少)
https://stackoverflow.com/questions/61784162
复制相似问题