将 ActiveMQ 内部的逻辑路由到特定的工作池

Routing Logic inside ActiveMQ to specific worker pool

我有一个场景,

我为 SMS 和 EMAILS 配置了相同的队列。

我希望 ActiveMQ 将消息路由到特定的使用者池,即如果它是 SMS,则必须将其路由到 SMS 的工作线程池。

所以,如果我需要增加 SMS 的数量,那么我只需要增加 SMS Worker Pool 的池大小,而不是 EMAIL worker 池。

我可以使用 Apache Camel 来实现满足我要求的路由逻辑吗???

有很多选项可以支持这一点:

  1. 在每条消息上设置一个 header 以便消费者可以使用 JMS 选择器来过滤消息。

  2. 在 ActiveMQ 代理中使用虚拟目标(代理可以根据消息 header 值进行过滤):http://activemq.apache.org/virtual-destinations.html

  3. 使用 Camel 代理组件编写自定义拦截器处理程序:http://activemq.apache.org/broker-camel-component.html

  4. 使用 Camel 消息路由器或按照 Nayan 的建议content-based-router

  5. 对每种消息类型使用单独的 queue(即 queue://OUTBOUND.SMS、queue://OUTBOUND.EMAIL ..)

各有好处 trade-offs。 #1、#4 和 #5 不需要任何 server-side 配置,这对于尽可能减少代理维护非常方便。