Activemq有两种消息类型,topic发布订阅,和queue队列消息。发布订阅,消息的发布方和订阅方都要在线,才能接收到消息,否则发布出来的消息有可能未被订阅到。如果发布的时候使用mqtt协议,然后再通过某种方式将mqtt的消息转发到某个队列,然后队列可以做持久化,这样,订阅方下次上线就可以从队列消费到数据。Activemq本身就提供这样的支持,类似于匹配topic规则,满足规则就放到定义的队列里。
打开activemq.xml,在broker节点里面就可以根据实际情况配置虚拟队列。如下:
下列配置是凡是.test.*topic的消息都转发到test2的队列和test222的topic里面
<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeTopic name=".test.*">
<forwardTo>
<queue physicalName="test2" />
<topic physicalName="test222" />
</forwardTo>
</compositeTopic>
</virtualDestinations>
</virtualDestinationInterceptor>
</destinationInterceptors>