我们有一组队列和交换来支持消息。
说我有一个扇出“foo-exchange”,它将消息发送到队列“bar”和“baz”。假设有消息进来,它有效,“bar”成功处理,但“baz”由于某种原因失败(可能是外部服务失败),我们想在5分钟后重试。来自“baz”的消息被发送回“foo-exchange”(通过延迟队列),然后不仅将其发送回“baz”,而且还发送回“bar”。
我们有一个每个队列的交换,以便在重试超时后将重试的消息发送回特定的队列。
在这种情况下,我们有3个交换(“foo-exchange”,“foo-exchange-dead”,“Baz-exchange-retry(每个队列1个扇出交换)”和3个队列(“baz-queue”) ,“baz-queue-delay”,“baz-queue-error”和整个交换的1个死队列(“foo-queue-dead”。
此设置用于1个队列扇出,并且会在扇出交换具有多个消费者队列时显着增加。
因此,我们需要一种解决方案,可以将这种复杂的设置减少为一些可管理的队列和交换
答案 0 :(得分:1)
每个队列也绑定到默认交换(""),路由密钥等于队列名称。
您只需将过期的死信直接路由到原始队列即可。
答案 1 :(得分:0)
其中一个选项是在放入Delay队列之前用Destination详细信息装饰消息,然后当消息等待持续时间到期时,将解包消息以获取目标和原始消息并发送到目的地。