0

我有一个场景,

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

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

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

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

4

1 回答 1

0

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

  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.EMAIL..)

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

于 2017-01-16T22:10:33.877 回答