项目中用到activemq,所有的队列都需要由其中的一个队列(MB)进行路由跳转,最早的设计是在队列(MB)做一个监听,由监听在根据路由条件路由到其中的队列中。后来使用activemq的插件发现也可以对消息进行路由。设计的想法如下:
官网上关于activemq插件的文档不是很多,或者我没找到。不过,activemq下的activemq.xml为我们提供了一些系统自带的插件的例子。访问地址http://activemq.apache.org/schema/core/activemq-core.xsd(activemq5.12.0),搜过plugins,会发现会有以下系统自带的插件
根据系统自带的插件,编写一个例子如下
1)先写Filter代码
public class DiscardDynamicQueue extends BrokerFilter {
private Logger logger = LoggerFactory.getLogger(getClass());
private String queueName = "my_mb_queue";
public DiscardDynamicQueue(Broker next) {
super(next);
}
@Override
public void send(ProducerBrokerExchange producerExchange, Message msg) throws Exception {
System.out.println("message send");
ActiveMQDestination dest = msg.getDestination();
System.out.println("dest name [" + dest.getPhysicalName() + "]");
ActiveMQDestination newDest11111 = ActiveMQDestination.createDestination("my-test-plugin-queue", ActiveMQDestination.QUEUE_TYPE);
msg.setDestination(newDest11111);
System.out.println("send hualala1");
logger.info("send");
super.send(producerExchange, msg);
}
}
2)再次编写Plugin类
public class DiscardDynamicPlugin implements BrokerPlugin {
@Override
public Broker installPlugin(Broker broker) throws Exception {
System.out.println("new plusn ");
return new DiscardDynamicQueue(broker);
}
}
3)在activemq中的activemq.xml中进行如下配置,以下配置要放在broker中。
<plugins>
<!--系统自带插件-->
<loggingBrokerPlugin logAll="true"></loggingBrokerPlugin>
<bean xmlns="http://www.springframework.org/schema/beans" id="serviceRequestPlugin" class="my.plugins.BrokerPlugin">
</bean>
</plugins>
4)编写Test类向activemq发送消息,无论向哪个队列发送消息,最后消息都会被发送到队列中
my-test-plugin-queue