Maven 导入ActiveMQ
<!-- activeMQ --> <activemq.version>5.11.0</activemq.version> <!-- activeMQ --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>${activemq.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${spring-framework.version}</version> </dependency> ActiveMQ的配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jms="http://www.springframework.org/schema/jms" xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置JMS连接工厂 --> <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory" p:brokerURL="tcp://localhost:61616"> <!-- <property name="brokerURL" value="failover:(tcp://localhost:61616)" /> --> </bean> <!-- 定义消息队列(Queue) --> <bean id="queue" class="org.apache.activemq.command.ActiveMQQueue" c:name="spitter.queue"> <!-- 设置消息队列的名字 --> <!-- <constructor-arg> <value>queue1</value> </constructor-arg> --> </bean> <!-- 定义主题(topic) --> <bean id="topic" class="org.apache.activemq.command.ActiveMQTopic" c:name="spitter.topic"></bean> <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> <property name="defaultDestination" ref="queue" /> <!-- <property name="defaultDestinationName" value="spitter.queue"/> --> <property name="receiveTimeout" value="60000" /> <!-- 设置消息转换器 --> <!-- <property name="messageConverter" ref="messageConverter"/> --> </bean> <bean id="messageConverter" class="org.springframework.jms.support.converter.MappingJackson2MessageConverter" /> <!-- 消息监听容器 --> <jms:listener-container connection-factory="connectionFactory"> <jms:listener destination="spitter.queue" ref="spittleHandler" method="handleSpittleAlert"/> </jms:listener-container> </beans> 然后来看看消息的生产者吧 注入JmsOperations, JmsOperations 为JmsTemplate所实现的接口@Autowired private JmsOperations jmsOperations; 发送消息
jmsOperations.send("spittle.alert.queue", new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { return session.createObjectMessage(spittr); } }); spittr为消息实体类
更简单点使用内置消息转换器
jmsOperations.convertAndSend(spittr); 在来看看接收者 ObjectMessage receive = (ObjectMessage) jmsTemplate.receive(); try { System.out.println((Alert)receive.getObject()); } catch (JMSException e) { throw JmsUtils.convertJmsAccessException(e); } 同样可以也有内置转换接收
Alert spittr = (Alert) jmsTemplate.receiveAndConvert(); 最后消息监听器
public class SpittleAlertHandler { public void handleSpittleAlert(Alert alert) { System.out.println(alert.toString()); } }