当前位置: 首页 > 知识库问答 >
问题:

扇出交换上的RabbitMQ重试逻辑

冀啸
2023-03-14

我们有一个队列和交换集群来支持消息。

    null

我们每个队列都有一个交换,以便在重试超时期间后将重试的消息发送回特定的队列。

在这个场景中,我们有3个交换(“foo-exchange”、“foo-exchange-dead”、“baz-exchange-retry(每个队列1个fanout exchange)”和3个队列(“baz-queue”、“baz-queue-delay”、“baz-queue-error”和1个用于整个交换的死队列(“foo-queue-dead)。

此设置是为1个队列扇出,并将大大增加扇出交换机有多个消费者队列。

因此,我们需要一种解决方案,它可以将这种复杂的设置减少到一些可管理的队列和交换中

  1. x-delay-exchange:这对我们来说不是一个好的解决方案,因为它不能告诉有多少消息等待再次处理。我们需要知道在外部失败的情况下要重试多少次。(https://github.com/rabbitmq/rabbitmq-delayed-message-exchange)
  2. 到主队列的消息ttl:这将阻止延迟消息后面的所有消息。

共有1个答案

阎祖鹤
2023-03-14

每个队列还绑定到默认的exchange(“”),路由键等于队列名。

您可以简单地将过期的死信直接路由到原始队列。

 类似资料:
  • 我一直在尝试使用RabbitMQ,但遇到了以下问题(与此非常类似:RabbitMQ中的主题交换与直接交换)。 我需要密集地广播大约800种类型的消息(因此每种消息类型都会有很多消费者),我想知道以下哪种方法更好: > 创建一个直接交换,在该交换中,消息将使用路由密钥(消息类型名称)发送,每个消费者都将通过绑定了相应路由密钥的临时队列连接到该交换。(因为没有像“key1.key2.*”这样复杂的路由

  • 我能够使用Publish/SubscribeRabbitMQ Java教程创建扇出交换,任何连接的使用者都将收到一个消息的副本。我想在连接任何使用者之前创建交换和绑定,而不是动态/编程地声明交换和绑定。我已经通过RabbitMQ管理控制台完成了这一点。然而,由于某种原因,我的消费者以循环方式接收消息,而不是全部接收消息的副本。我错过了什么?下面是一些代码片段: 发布者: 消费者: ...在Rabb

  • 我正在使用RabbitMQ,我对使用扇出交换和类的(或)方法感到困惑。 例如,我有两个持久队列的使用者QUEUE-01和QUEUE-02,它们绑定到持久扇出交换fanout-01。并将1个发布服务器发送到FANOUT-01。我理解当消息使用(或)方法发布时会发生什么,消息将被复制到每个队列并由每个使用者处理。但我不确定如果我将调用方法会发生什么?我会从哪位消费者那里得到回复?有什么特别的行为吗?我

  • 我正在尝试编写一个应用程序,测试将N个交换绑定到内存、IO等相同队列的效果。 所有测试都使用“主题”交换类型。我遇到的问题是,当我使用多个exchange进行测试时,我没有收到我发布回的所有消息。但是,当我使用1 exchange时,我会收到所有消息。 你知道为什么会这样吗? 谢谢 编辑: 我有一个队列,它使用相同的绑定键绑定到两个“主题”交换: *。系统日志# #。系统错误 我将向每个excha

  • 问题内容: 我有下面的代码使用来将消息发布到队列中。该是越来越创建,但该消息无法被看到的队列。我也没有看到任何错误。 BasicApplication.java Producer.java 问题答案: 您使用了错误的方法;该方法的第一个参数是。 使用。

  • 在我的应用程序中,我使用spring cloud stream集成Rabbit MQ。默认情况下,spring cloud streams将目标创建为Rabbit MQ中的交换类型主题。如何配置spring cloud stream以创建fanout类型的交换?