1.安装activemq
到http://activemq.apache.org/ 下载最新版。我这里下载的是Windows版。
下载完成之后解压缩,运行bin目录下的activemq.bat,看到类似如下信息说明启动成功。
浏览器输入http://localhost:8161/admin/ 可查看本地activemq运行状态。
点击”Queues”可查看队列情况。现在没有信息,后面测试的时候会有信息。
2.Maven添加依赖
|
|
3.activemp.properties属性文件
|
|
4.spring-activemq.xml配置文件
|
|
其中的ActiveMQMessageListener
5.测试类TestActivemq.java
|
|
6.测试
运行一次TestActivemq.java,控制台输出如下,监听器已收到消息。
查看Queues界面。没有待处理消息,有1个消费者,已发送/接收了1条信息。
之前的控制台不要关,再运行一次TestActivemq.java,之前的控制台输出如下
说明之前的监听器又收到了消息。
再查看Queues界面。有2个消费者,已发送/接收了2条消息。
还是不关控制台,修改TestActivemq.java中发送消息的destinationName
再运行TestActivemq.java,控制台没有任何输出,再查看Queues
可以看到有一条待处理消息,没有消费者,发出1条消息,接收0条消息。
这里tenny:test队列的消费者有3个,因为之前启动的监听器都是针对队列tenny:test的,并没有监听这个新的panda队列。
修改activemq.properties
再运行TestActivemq.java,可以看到控制台输出
说明这次启动的监听器收到了之前的和当前的消息。
再查看Queues界面,新的队列panda也有一个消费者,发送2条,接收2条(即刚才启动的针对队列panda的监听器接收)。
7.总结
消息按队列区分(如这里的tenny:test和panda),每一个队列有生产者(发送消息)和消费者(接收消息)。当没有消费者的时候,生成者的消息就暂时悬挂起来,一旦有消费者空闲,就会接收消息。
在测试中,已启动两次TestActivemq.java后,不修改测试代码,继续运行多次TestActivemq.java。可以发现,每次运行后,发送的消息都是由之前的多个监听器随机接收。
这里测试直接使用了jmsTemplate,实际应用中,应该写一个service,将jmsTemplate作为私有变量,通过spring注入。然后根据业务封装自己发送的消息。
可以为每个业务模块配置单独的activemq.properties,编写对应的生产者service和监听器。每个模块的消息互不干扰。