RabbitMQ头交换路由:匹配所有列出的头
我有许多具有不同功能集的消费者,所以我希望将消息路由到处理,以更正其中一个。我决定使用头交换并在消息头中指定必要的特性,但这里遇到了障碍 在rabbitMQ中,有一个绑定参数RabbitMQ头交换路由:匹配所有列出的头,rabbitmq,amqp,Rabbitmq,Amqp,我有许多具有不同功能集的消费者,所以我希望将消息路由到处理,以更正其中一个。我决定使用头交换并在消息头中指定必要的特性,但这里遇到了障碍 在rabbitMQ中,有一个绑定参数x-match,它只能取any和all()的值。每个消费者在绑定时都有一个可用特性的大列表(大多数是真/假,但也有字符串),我将这些特性与x-match参数一起指定为绑定参数。但当我发布消息时,我只想指定必要的标题,例如,带有特定值的feature-1和feature-7。发布消息时,我甚至不知道所有可用的消费者功能。这里有
x-match
,它只能取any和all()的值。每个消费者在绑定时都有一个可用特性的大列表(大多数是真/假,但也有字符串),我将这些特性与x-match
参数一起指定为绑定参数。但当我发布消息时,我只想指定必要的标题,例如,带有特定值的feature-1和feature-7。发布消息时,我甚至不知道所有可用的消费者功能。这里有一个问题:如果我在x-match==all
时遗漏了一些绑定参数,消息将不会被路由,并且如果我将x-match
设置为any
,唯一匹配的头就足以路由消息-尽管另一个头的值可能不匹配
给你一个例子,让我们考虑消费者的特性:<代码>国家=美国,f1= true,f2= true,f3= false 。p>
- 场景1:因此我使用这些参数将其队列附加(创建绑定)到交换头,并将
设置为all。然后我发布消息,我需要x-match
为“我们”,而country
为真。我对其他可能的消费者功能一无所知。消息不会被路由,因为不是所有的头都完全匹配f2
- 场景2:另一个用例是,如果我使用
参数将队列绑定到x-match
。如果我再次将any
指定为“US”并将country
指定为true,则消息将被路由,但如果f2
设置为false且只有f2
匹配,则消息也将被(错误地)路由country
所以我可能误解了一些东西,但我在寻找最简单的解决方案:如何根据必要的特性列表将消息路由到正确的消费者。我想为
x-match
参数使用类似all-specified
的值,该参数不要求列出所有可用的功能,但要求所有给定的标题完全匹配。事实上,只有自己的exchange可能对我有所帮助。如果我在二郎成功,我将在这里报告
更新
我设法写了自己的插件,适合我的目的。也许它并不完美,但目前对我来说效果不错
如果唯一的办法是编写自己的exchange,那就有点遗憾了。Erlang对我来说似乎是一种魔力。太好了,我会试试这个插件。这个功能非常有用,我不明白RabbitMQ为什么没有它@Serge你能分享一下你使用这个插件的经验吗。你在生产中用过吗?嗨。是的,我们用过。我们没有额外的高负荷,但我们从未遇到过任何问题。实际上这是一个稍微修改过的headers插件,我只修改了尽可能少的代码。不幸的是,这个项目现在被放弃了,所以我没有关于它的最新统计数据@斯米莫夫