You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:44:36