我有很多消费者具有不同的功能集,所以我希望路由消息能够处理以纠正其中一个。我决定使用标题交换并在邮件标题中指定必要的功能,但这里陷入了障碍。
在rabbitMQ中,存在绑定参数x-match
,其可能仅取值任何和全部(https://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2013-July/028575.html)。相反,每个消费者在绑定时都有大量可用功能(大多数是真/假,但也有字符串),我将其指定为绑定参数以及x-match
参数。但是当我发布消息时,我只想指定必要的标题,例如,具有特定值的 feature-1 和 feature-7 。在发布消息时,我甚至不知道所有可用的消费者功能。这里有问题:如果我在x-match==all
时错过了一些绑定参数,则消息不会被路由,如果我将x-match
设置为any
,则唯一匹配的标头就足够了路由消息 - 尽管另一个标题的值可能不匹配。
举个例子,让我们考虑具有以下功能的消费者:country=US, f1=true, f2=true, f3=false
。
x-match
设置为全部。然后我发布消息,我需要country
" US" 和f2
为 true 。我对其他可能的消费者功能一无所知。消息不会被路由,因为并非所有标头都完全匹配。x-match
参数设置为any
的队列绑定。如果我再次指定country
为"美国" 和f2
为 true - 邮件将被路由,但也如果f2
设置为 false 且只有country
匹配,则会(错误地)路由它。所以我可能误解了一些东西,但我为我寻找最简单的解决方案:如何根据必要功能列表将消息路由到正确的消费者。我想对all-specified
参数使用类似x-match
的值,它不会要求列出所有可用的功能,但会要求所有给定的标题完全匹配。
答案 0 :(得分:1)
事实上,只有自己的交流才有助于我的目的。如果我在erlang中取得成功,我会在这里报告。
我设法编写了适合我目的的插件。可能它并不完美,但现在对我有用。
https://github.com/senseysensor/rabbitmq-x-features-exchange