ActiveMQ Artemis是否支持生产者按消息指定最终代理目的地?
ActiveMQ Artemis单条消息指定最终代理/队列问题
场景背景
正在评估将ActiveMQ Artemis作为SonicMQ的替代方案,现有SonicMQ的业务逻辑如下:
- 在欧洲和美洲各部署一个broker;
- 每个broker都有一组同名队列(例如:
europe::q1和americas::q1); - 客户端仅能连接本地broker,但可将目标队列指定为远程broker管理的队列:
- 欧洲客户端发送消息到
q1,消息进入europe::q1队列; - 欧洲客户端发送消息到
americas::q1,欧洲broker接收后会将消息推送至美洲broker的q1队列。
- 欧洲客户端发送消息到
已知Artemis可通过Queue Federation实现永久配置的路由,现询问:ActiveMQ Artemis是否允许按单条消息指定最终的代理/队列?
回答
ActiveMQ Artemis 支持按单条消息指定最终的代理/队列,主要有两种实用方式:
- 消息属性直接指定:发送消息时设置
_AMQ_ROUTE_TO属性,填入目标远程broker的地址或队列标识,本地broker收到消息后会直接按该属性值转发,不需要预先配置永久的Queue Federation规则。 - 动态转发规则+消息选择器:在本地broker配置灵活的地址转发规则,配合自定义的消息属性作为选择器,让单条消息根据自身属性决定转发到哪个远程代理/队列。
针对你提到的类似americas::q1的命名格式,完全可以通过上述方式实现和SonicMQ一致的效果——要么直接在_AMQ_ROUTE_TO里填入该标识,要么配置对应的转发规则匹配这类格式的目标。
内容的提问来源于stack exchange,提问作者Cosmittus
相关产品推荐
相关产品推荐

