gpt4 book ai didi

sockets - 如果消息发布(启用确认)到具有免费消费者的队列,RabbitMQ 是否会保证交付?

转载 作者:行者123 更新时间:2023-12-03 11:59:46 26 4
gpt4 key购买 nike

上下文:

假设我使用 RabbitMQ 执行以下操作:

  • 将消费者连接到队列 Q在 RabbitMQ 中。
  • 该消费者可以在 noack模式,与否;没什么区别。
  • 如果不在 noack模式;假设这个消费者已经设置了 basic.qoschannel.flow以便它可以接收消息;它的缓冲区未满,可以使用。
  • 将发布者连接到同一个 RabbitMQ 集群,并将必填消息(启用 publish confirmations)发布到 Q .
  • 收到 basic.ack在出版商。

  • 问题:
  • 当那 basic.ack返回,RabbitMQ 是否保证已将该消息发送到消费者的远程套接字?我知道它不能保证消息已经到达消费者的本地套接字缓冲区,但我对代理是否发送消息很感兴趣。
  • 是否存在 mandatory发布以任何方式影响这些保证?
  • 在消息发布之前队列是否完全为空是否会以任何方式影响这些保证?
  • RabbitMQ 路由消息的版本是否以任何方式影响这些保证(即这些保证仅存在于某些 RMQ 版本中)?
  • 消息的持久性是否会以任何方式影响这些保证?
  • 目的RMQ是否为clustered以任何方式影响这些保证?
  • 每条消息过期时间的存在/不存在是否会以任何方式影响这些保证?

  • TL;DR:在任何情况下,RMQ 是否会向发布者保证已发布的消息已从代理发送到消费者?

    我试过的:

    我已经尝试通过连接消费者并将消息发布到各种配置的队列来测试这一点。这些消息通常在 basic.ack 之前收到。已经收到。但是,我无法从中推断出任何保证,因为在许多地方都引入了延迟和混淆:
  • basic.ack的中转时间回到出版商。
  • 消息体到消费者的传输时间。
  • 同步发布者和消费者之间的跟踪时钟(如果他们在不同的主机上/在不同的进程中)使得这一点难以证明。

  • 因此,由于在外部验证这些东西(没有模糊器或类似 jepsen 之类的东西),我正在寻求代理本身由于其内部代码流而提供的保证的知识。

    最佳答案

    Are there any circumstances in which RMQ guarantees, to the publisher that a published message has been sent from the broker to a consumer?



    不。

    ack对于发布者,声明消息已被 RabbitMQ 交换接收,并将被路由。

    例如,您可以使用未连接到队列的路由键将消息路由到遗忘中。在这种情况下,发布者仍会收到 ack ,因为消息已发布。它只是没有去任何地方。

    关于sockets - 如果消息发布(启用确认)到具有免费消费者的队列,RabbitMQ 是否会保证交付?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39549878/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com