首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >延迟消息的传递顺序与在RabbitMQ中发送的顺序相同

延迟消息的传递顺序与在RabbitMQ中发送的顺序相同
EN

Stack Overflow用户
提问于 2020-05-13 20:24:22
回答 1查看 800关注 0票数 2

我正在尝试实现一个rabbitmq延迟消息队列(没有插件)。我正经历着一些奇怪的问题。以下是我当前的设置(不是实际名称,顺便说一句)

1交易所“交易所”

两个队列:最终目标队列“队列”和延迟队列“延迟”

这两个队列都绑定到"Exchange“。

以下是我如何发布这条信息

代码语言:javascript
运行
复制
err := confirmModeChannel.Publish(
  "Exchange", // exchange
  "Delayed",   // routing key
  false,        // mandatory
  false,
  amqp.Publishing{
    Body:         payload,
    Expiration:   expiration,
  })

(已处理发布确认,但此处未显示)

以及延迟信道的定义

代码语言:javascript
运行
复制
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
  )

以及它与交换的关系

代码语言:javascript
运行
复制
channel.QueueBind(
    "Delayed",    // queue name
    "Delayed",    // routing key
    "Exchange",    // exchange
    false,
    nil,
)

交易所被正确地定义为“直接”。

问题是,如果我使用“队列”,并将一些消息发布到“延迟”,则消息到达的顺序与发送的顺序相同,但延迟到最大过期时间。例如

代码语言:javascript
运行
复制
send message 1 with 3s delay
send message 2 with 1s delay

在3s之后,它们就被送到了

代码语言:javascript
运行
复制
received message 1 at [timestamp1]
received message 2 at [timestamp2]

timestamp1和timestamp2几乎一样(有些纳秒不同),我不知道我在哪里搞砸了?我希望这些信息会按这个顺序到达。

代码语言:javascript
运行
复制
received message 2 at [timestamp2]
received message 1 at [timestamp1]

timestamp2与timestamp1的距离约为2s。

我在用

运行在1.14

  • rabbitmq:3.8.3-management-alpine中的
  • golang
EN

回答 1

Stack Overflow用户

发布于 2021-10-25 15:11:45

FIFO

消息2的传递等待消息1的传递(尽管延迟较少)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61784162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档