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

RabbitMQ设计建议:将DLX消息路由回原始发布服务器

颜志业
2023-03-14

Edit:基础要求是,我有多个Web服务服务器进程接收来自Web服务客户端的请求,执行一些处理(我希望使用工作队列进行的处理),然后将结果返回给相应的客户端。但是,我希望能够等待这个队列的使用者在超时内获取已发布的请求。如果此超时过期,那么我希望原始webservice进程接收到此通知,以便它能够反馈给客户机。

  • 我有多个发布服务器将邮件发布到同一Exchange
  • 此交换机上有多个使用者从同一队列(即'task-queues'
  • 使用

我正在尝试实现一种“发布TTL”,如果消息是死字的,则(仅)通知原始发布者。(我希望发布者知道消息是否在某个超时内未被使用)。

  • 发布消息时,每个发布服务器使用包含唯一(每个发布服务器)进程ID的路由密钥,例如发布服务器3的“thekey.pid3”
  • 使用者都从同一个队列中使用,该队列使用路由密钥“thekey.#”绑定到交换机
  • 在发布者声明队列时,我没有为DLX显式指定任何路由密钥--只指定'x-dead-letter-exchange'。这意味着,如果消息是死字的,那么原始路由密钥(即'thekey.pid3')将传递到DLX。
  • 每个发布服务器使用其特定的路由密钥(例如'thekey.pid3'
  • 将其自己的新使用者队列绑定到DLX

这就解决了我的需求,因为只有发布消息的发布服务器才会将DLX消息路由到它。

然而,这似乎有点复杂--而且效率很低,因为通配符路由会对所有消息进行(除了那些没有字母的消息--这通常不应该发生)。

下面是我的设计图:

谢谢!

共有1个答案

宋景福
2023-03-14

对,结果证明这个解决方案是有效的。当使用通配符绑定键和主题交换时,可能会有一个很小的延迟,但可能没有什么需要自己真正关心的。

邮件列表中的一个评论是,由于这是一个基于RPC的系统,每个发布者都已经定义了一个唯一的响应队列,因此可以将该队列绑定到DLX(而不是为每个发布者创建一个新的唯一队列),从而获得“有效”响应和被丢弃的消息。

在我的例子中,我想在一个通用的发布服务器中包装这个“发布TTL”功能,所以引用响应队列没有意义--尽管我的解决方案的效率可能略低,因为在出现死信的情况下会多一次往返。

如果您对Rabbit的人用于主题路由的机制感兴趣,可以访问:http://www.rabbitmq.com/blog/2010/09/14/very-fast-and-scalable-topic-routing-part-1/http://www.rabbitmq.com/blog/2011/03/28/very-fast-and-scalable-topic-routing-part-2//

 类似资料:
  • 本文向大家介绍Python如何将消息发布到RabbitMQ,包括了Python如何将消息发布到RabbitMQ的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 接下来,我们需要打开与RabbitMQ服务器的连接。 之后,我们需要建立一个频道。每个连接可以有多个通道,通常在执行多线程任务时,建议(但不是必需)每个线程一个。 建立频道后,我们就可以开始准备信息了。 现在,我们可以通过简单

  • 我已经实现了如下所示的示例Spring Dynamic Destination 在rabbitmq中,它动态地创建一个交换,但没有提供绑定或路由密钥的选项。我的要求是用路由密钥向这个动态创建的exchange发送消息。我需要如何实现这一点来设置路由密钥?

  • 我是新Kubernetes。我在一个pod中实现了一个网络服务器,并为该pod设置了一个Nodeport服务。我想发送一个POST请求与自定义消息(在json中)到一个pod后,它已经被创建并准备好使用。我想使用go客户端库。你能告诉我怎么做吗?图书馆的哪个部分来帮忙?谢谢。

  • 我正在考虑将Socket.io集成到一个express应用程序中。 js有一个非常好的特性,可以通过socket.io消息调用快速路由。 不过,帆在其他方面比我需要的要多一点。我正在寻找一种方法,使socket.io请求转发到快速路由,而不必使用整个sails框架。我想这是一个很常见的需求,所以我很惊讶我没有找到一个npm模块来做这件事,但是找了很长时间,我什么也没有找到。Express.io会这

  • 全部的 我对RabbitMQ在消耗大量消息(例如280000条)时的性能有一个问题。从性能角度来看,它似乎会上下波动。从管理控制台获取的图中所示的图表演示了这一点,其中消费者平均每秒约40条消息,然后跳到每秒约120条消息: 该模式将再次重复,它将再次返回到40,然后再次返回120,依此类推,如果我在1小时后运行相同的测试,则会发生相同的上下效应,但范围可能会有很大差异,例如每秒140到400条消

  • : 和 : 根据我找到的一些建议,我尝试从我的eureka服务器中隐藏网关,但问题仍然存在,将其添加到网关中的中: