如何在ActiveMQ Artemis中实现动态匹配地址的消息扇出转发
如何在ActiveMQ Artemis中实现动态匹配地址的消息扇出转发
嘿,我来给你唠唠怎么在ActiveMQ Artemis里实现你要的这种动态扇出转发~
你的场景是生产者发消息到inputMsg地址,要自动转发到所有像bc.service1、bc.client2这种匹配bc.*模式的动态地址对吧?其实用Artemis自带的转发规则就能搞定,而且完全支持动态新增的目标地址,不用提前把所有bc.xxx都配置好,非常灵活。
给你两种实用的实现方法:
方法一:用Divert(转发规则)配置
直接在Artemis的核心配置文件broker.xml里加个转发规则就行,步骤超简单:
- 找到配置文件里的
<diverts>标签(如果没有就自己在核心配置区域新增),插入这段配置代码:
<divert name="input-to-bc-divert"> <address>inputMsg</address> <!-- 用通配符匹配所有以bc.开头的单级地址 --> <forwarding-address>bc.*</forwarding-address> <!-- 设为false的话,原inputMsg地址的消费者也能收到消息;设为true则消息只会被转发,原地址收不到 --> <exclusive>false</exclusive> <!-- 多播模式确保所有匹配的目标地址都能收到消息 --> <routing-type>MULTICAST</routing-type> </divert>
配置好重启Broker之后,不管你之后动态新增多少个bc.xxx的地址(比如消费者连接上来自动创建的),inputMsg的消息都会自动转发过去,完美实现你要的动态扇出效果。
方法二:用地址转发配置
如果你觉得Divert有点重,也可以直接在地址设置里加轻量的转发规则:
- 找到
broker.xml里的<address-settings>标签,插入这段配置:
<address-setting match="inputMsg"> <!-- 同样用通配符指定转发的目标地址模式 --> <forwarding-address>bc.*</forwarding-address> </address-setting>
这种方式本质是给inputMsg这个地址设置了全局转发规则,效果和Divert完全一致,同样能支持动态新增的bc.xxx地址,配置起来更简洁。
另外要提一句,Artemis默认的通配符规则是*匹配单级地址(比如bc.*能匹配bc.service1但不匹配bc.service1.sub),#匹配多级地址。如果你之前修改过Broker的通配符配置,记得对应调整你的模式字符串就行。
备注:内容来源于stack exchange,提问作者effedici
相关产品推荐
相关产品推荐

