将 ActiveMQ 内部的逻辑路由到特定的工作池
Routing Logic inside ActiveMQ to specific worker pool
我有一个场景,
我为 SMS 和 EMAILS 配置了相同的队列。
我希望 ActiveMQ 将消息路由到特定的使用者池,即如果它是 SMS,则必须将其路由到 SMS 的工作线程池。
所以,如果我需要增加 SMS 的数量,那么我只需要增加 SMS Worker Pool 的池大小,而不是 EMAIL worker 池。
我可以使用 Apache Camel 来实现满足我要求的路由逻辑吗???
有很多选项可以支持这一点:
在每条消息上设置一个 header 以便消费者可以使用 JMS 选择器来过滤消息。
在 ActiveMQ 代理中使用虚拟目标(代理可以根据消息 header 值进行过滤):http://activemq.apache.org/virtual-destinations.html
使用 Camel 代理组件编写自定义拦截器处理程序:http://activemq.apache.org/broker-camel-component.html
使用 Camel 消息路由器或按照 Nayan 的建议content-based-router
对每种消息类型使用单独的 queue(即 queue://OUTBOUND.SMS、queue://OUTBOUND.EMAIL ..)
各有好处 trade-offs。 #1、#4 和 #5 不需要任何 server-side 配置,这对于尽可能减少代理维护非常方便。
我有一个场景,
我为 SMS 和 EMAILS 配置了相同的队列。
我希望 ActiveMQ 将消息路由到特定的使用者池,即如果它是 SMS,则必须将其路由到 SMS 的工作线程池。
所以,如果我需要增加 SMS 的数量,那么我只需要增加 SMS Worker Pool 的池大小,而不是 EMAIL worker 池。
我可以使用 Apache Camel 来实现满足我要求的路由逻辑吗???
有很多选项可以支持这一点:
在每条消息上设置一个 header 以便消费者可以使用 JMS 选择器来过滤消息。
在 ActiveMQ 代理中使用虚拟目标(代理可以根据消息 header 值进行过滤):http://activemq.apache.org/virtual-destinations.html
使用 Camel 代理组件编写自定义拦截器处理程序:http://activemq.apache.org/broker-camel-component.html
使用 Camel 消息路由器或按照 Nayan 的建议content-based-router
对每种消息类型使用单独的 queue(即 queue://OUTBOUND.SMS、queue://OUTBOUND.EMAIL ..)
各有好处 trade-offs。 #1、#4 和 #5 不需要任何 server-side 配置,这对于尽可能减少代理维护非常方便。