spring jms结合activemq
一、下载activemq
这个例子使用的版本是5.9.0
链接:http://download.csdn.net/download/hpw90333/6652367
先下载了5.14.2运行后出错:
javax.jms.JMSException: Cannot send, channel has already failed: tcp://127.0.0.1:61616
Transport Connection to: tcp://127.0.0.1:50941 failed: java.io.EOFException | org.apache.activemq.broker.TransportConnection.Transport | ActiveMQ Transport: tcp:///127.0.0.1:50941@61616
暂时没查出原因
猜测有可能是要添加新的配置或者是spring的版本问题
二、解压将activemq-broker-5.9.0.jar activemq-client-5.9.0.jar放入spring项目中注意机器上运行的版本和jar包的匹配
三、在spring的配置文件中配置activemq 的bean ActiveMQConnectionFactory注入要连接的activemq地址brokerURL,例如:tcp://localhost:61616(61616为activemq的端口)
配置spring jmstemplate 注入属性mqConnectionFactory
四、测试
测试生产端:
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml"); JmsTemplate jmsTemplate = app.getBean(JmsTemplate.class); jmsTemplate.convertAndSend("gamelife.alert.queue", "test message");
获取jmstemplate然后调用convertAndSend向指定的频道发送消息
测试消费端:
ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml"); JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate"); //System.out.println(jmsTemplate == null); String message = (String) jmsTemplate .receiveAndConvert("gamelife.alert.queue"); System.out.println(message);
获取 jmstemplate调用recieveAndConvert方法从指定频道读取消息
可以在消费端直接配置监听:
写一个监听的bean实现jms 的MessageListener接口
package com.hy.jms; import javax.jms.Message; import javax.jms.MessageListener; public class JmsHandler implements MessageListener{ @Override public void onMessage(Message message) { System.out.println("收到消息:"+message); } }
配置bean 将bean加入jms listener的监听容器中
<bean name="jmsHandler" class="com.hy.jms.JmsHandler"></bean> <jms:listener-container> <jms:listener destination="gamelife.alert.queue2" ref="jmsHandler"/> </jms:listener-container>
说明:
jms为异步消息
结构图如下: