我有一个场景,发布者需要向已知的交换机发送消息(他们不会直接知道下游队列)。大多数消息应该传递到每个绑定队列(如扇出),但有些消息只需要传递给特定的绑定队列。我想避免多次交换以及多个队列绑定。
我当前的解决方案使用标题路由,其中消息具有两个标题之一,将其标识为" global"或者"特定于特定子",其中下游队列绑定在这两个头的匹配上。我认为这会有效,但我觉得应该有一个更简单的解决方案。
我试图找到一个交换插件,除了特定的消息之外,它会消除所有消息#34;但是我找不到这样的插件。除此之外,有关如何实施这种路由策略的任何想法吗?
答案 0 :(得分:0)
对于它的价值,我的原始解决方案使用"标题"使用&#34匹配的队列交换;匹配任何"是唯一一个我能找到的,没有写一个新的交换插件。它确实有效,到目前为止似乎相当快(至少没有明显慢于典型的"主题"交换 - 我无法在这种情况下应用这种方式)。
根据我对这个主题的研究,理想的解决方案将是一个"主题"交换能力使用RegEx或至少某种形式的"或逻辑"。我确实找到了一些信息,暗示RegEx被考虑但决定反对(赞成"点缀符号"主题格式),因为后者更快,特别是因为使用RegEx会要求每个绑定都是评估每条新消息(即没有办法构建"搜索快捷方式")。
目前,我的#34;匹配任意标头交换"解决方案将满足我的目的,但在未来,一个"主题"允许"或 - 逻辑"的交换可能值得探索。它将允许使用单绑定实现多个主题模式,而无需RegEx的开销。但我没有使用Erlang的经验,也没有足够的时间来学习编写必要的插件。如果有人有兴趣就此进行合作,请与我联系。
答案 1 :(得分:0)
你描述的内容实际上听起来像是交换到交换绑定,因为丰富的路由实际上是RMQ的优势之一。
您可以创建指向扇出(对于通用情况)或主题/直接对象(对于特殊情况)的条目交换,并将所有路由留给RMQ。 entry-exchange
可以是标头交换,也可以是直接交换,具体取决于您要在标头中添加的内容:
entry-exchange -----> fanout-exchange ---*---> multiple-fanout queues
\
\---> the special exchange --> queue-for-special-usecase