编辑:基本要求是我有多个Web服务服务器进程接收来自Web服务客户端的请求,执行一些处理(我想使用工作队列),然后将结果返回给相应的客户端。但是,我希望能够等待此队列的消费者获取已发布的请求,在超时内。如果此超时到期,那么我希望原始Web服务进程收到此通知,以便它可以反馈给客户端。
我尝试实施某种“发布TTL”,如果邮件是无效的,则会通知始发发布者(仅限)。 (我希望发布者知道在某个超时时间内是否没有使用该消息)。
我有一个解决方案如下:
所以这解决了我的要求,因为只有发布消息的发布者才会将DLX消息路由到它。
然而,这看起来有点复杂 - 并且效率低下,因为所有消息都会出现通配符路由(除了那些死信 - 除非正常正在发生)。这必须是一个常见的要求 - 我的解决方案是否可取?有没有更有效的方法来做到这一点?还是我走在正确的轨道上?
这是显示我的设计的图表:
编辑: 在下图中,DLX实际上应该连接到队列,而不是Exchange!
谢谢!
答案 0 :(得分:0)
是的,事实证明解决方案非常有效。使用通配符绑定密钥和主题交换时,可能会有小延迟命中,但可能没有什么值得关注的。
邮件列表中的一条评论是因为这是一个基于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/