将 ActiveMQ 中的逻辑路由到特定的工作线程池



我有一个场景,

我为短信和电子邮件配置了相同的队列。

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

因此,如果我需要增加 SMS 的数量,那么我只需要增加 SMS 工作线程池的池大小,而不是 EMAIL 工作线程池。

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

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

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

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

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

  4. 按照 Nayan 的建议使用 Camel 消息路由器或基于内容的路由器

  5. 对每种消息类型(即 queue://OUTBOUND.SMS、queue://OUTBOUND)使用单独的队列。电子邮件..)

每个都有好处和权衡。 #1、#4 和 #5 不需要任何服务器端配置,这对于保持尽可能低的代理维护非常方便。

最新更新