注 所使用的所有activemq端口均为默认端口(无修改)
activeMQ与Spring的整合依赖的jar
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.9.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.9.0</version> </dependency>
消息发送端的配置
在spring的配置文件中加上如下的配置
1 <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" 2 destroy-method="stop"> 3 <property name="connectionFactory"> 4 <bean class="org.apache.activemq.ActiveMQConnectionFactory"> 5 <property name="brokerURL"> 6 <value>tcp://localhost:61616</value> 7 </property> 8 </bean> 9 </property> 10 <property name="maxConnections" value="100"></property> 11 </bean> 12 13 <!--使用缓存可以提升效率--> 14 <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> 15 <property name="targetConnectionFactory" ref="jmsFactory"/> 16 <property name="sessionCacheSize" value="1"/> 17 </bean> 18 19 <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 20 <property name="connectionFactory" ref="cachingConnectionFactory"/> 21 <property name="messageConverter"> 22 <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/> 23 </property> 24 </bean> 25 26 <!--测试Queue,队列的名字是spring-queue--> 27 <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue"> 28 <!--<constructor-arg index="0" value="spring-queue"/>--> 29 <constructor-arg name="name" value="spring-queue"/> 30 </bean> 31 32 <!--测试Topic--> 33 <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic"> 34 <constructor-arg index="0" value="spring-topic"/> 35 </bean>
点对点的发送端
1 import javax.annotation.Resource; 2 import javax.jms.Destination; 3 import javax.jms.JMSException; 4 import javax.jms.Message; 5 import javax.jms.Session; 6 7 import org.slf4j.Logger; 8 import org.slf4j.LoggerFactory; 9 import org.springframework.jms.core.JmsTemplate; 10 import org.springframework.jms.core.MessageCreator; 11 import org.springframework.stereotype.Service; 12 13 import com.alibaba.fastjson.JSON; 14 import com.spr.plat.modules.jysb.retentionaward.entity.RetentionAwardUser; 15 16 @Service 17 public class AMQSenderServiceImpl { 18 private static final Logger logger = LoggerFactory.getLogger(AMQSenderServiceImpl.class); 19 20 @Resource(name = "jmsTemplate") 21 private JmsTemplate jmsTemplate; 22 23 //目的地队列的明证,我们要向这个队列发送消息 24 @Resource(name = "destinationQueue") 25 private Destination destination; 26 27 //向特定的队列发送消息 (RetentionAwardUser 自定义java对象) 28 public void sendMsg(RetentionAwardUser v_RAU) { 29 String msg = JSON.toJSONString(v_RAU); 30 try { 31 logger.info("将要向队列{}发送的消息msg:{}", destination, msg); 32 jmsTemplate.send(destination, new MessageCreator() { 33 @Override 34 public Message createMessage(Session session) throws JMSException { 35 return session.createTextMessage(msg); 36 } 37 }); 38 } catch (Exception ex) { 39 ex.printStackTrace(); 40 logger.error("向队列{}发送消息失败,消息为:{}", destination, msg); 41 } 42 } 43 }
消息接收端的配置
1 <bean id="jmsContainer" 2 class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 3 <property name="connectionFactory" ref="cachingConnectionFactory"/> 4 <property name="destination" ref="destinationQueue"/> 5 <property name="messageListener" ref="messageListener"/> 6 </bean>
点对点的接收端
1 import javax.jms.JMSException; 2 import javax.jms.Message; 3 import javax.jms.MessageListener; 4 import javax.jms.TextMessage; 5 6 7 /** 8 * MQ 消息监听器 9 * 10 * @author ***** 11 * 12 * @date 2018-8-28 14:08:30 13 * 14 */ 15 public class MQMessageListener implements MessageListener{ 16 17 18 /** 19 * 消息监听器 20 * @author ***** 21 * @date 2018-8-28 14:13:00 22 * @version 1.0 23 */ 24 @Override 25 public void onMessage(Message msg) { 26 if (msg instanceof TextMessage) { 27 try { 28 String message = ((TextMessage)msg).getText(); 29 System.err.println("\r\n 接收到的MQ消息:"); 30 System.err.println(message); 31 } catch (JMSException e) { 32 e.printStackTrace(); 33 } 34 } else { 35 throw new IllegalArgumentException("Message must be of type TextMessage"); 36 } 37 } 38 39 }
最后在spring配置文件中加上如下配置
<bean id="messageListener" class="com.spr.plat.modules.jysb.retentionaward.service.MQMessageListener"></bean>
转载于:https://www.cnblogs.com/bkxyq/p/9548678.html