ActiveMQ(二)与Spring集成
来源:互联网 发布:如何她推做淘宝客 编辑:程序博客网 时间:2024/06/06 01:07
声明 转载请注明出处! Reprint please indicate the source!
ActiveMQ与Spring集成
由于历史原因,JMS有4个版本。Spring提供了用于简化JMS API使用的抽象框架,并且对用户屏蔽了JMS API中1.0.2和1.1版本的差异。
JMS的功能大致上分为两块,叫做消息制造和消息消耗。JmsTemplate用于制造消息和同步消息接收。和J2EE的事件驱动Bean风格类似,对于异步接收消息,Spring提供了一些消息监听容器来创建消息驱动的POJO(MDP)。
ActiveMQ与Spring整合需要activemq-spring.jar包
Maven 整合Demo
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jahentao</groupId> <artifactId>DEMO-ActiveMQ</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>DEMO-ActiveMQ</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--引入的若是activemq-all.jar,且工程中已经引入了SLF4J,会与activemq-all.jar中的SLF4J发生冲突。--> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.24</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.24</version> </dependency> <!-- 与Spring集成 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-spring</artifactId> <version>5.14.4</version> </dependency> </dependencies></project>
配置文件Demo
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 1.配置connectionFactory --> <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="tcp://192.168.235.100:61616"/> </bean> </property> <property name="maxConnections" value="100"/> </bean> <!-- 2.定义消息目标 --> <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="queue_temp"/> </bean> <!-- 3.配置Spring JMS Template --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 3.1 注入jmsFactory --> <property name="connectionFactory" ref="jmsFactory"/> <!-- 3.2 配置消息目标 --> <property name="defaultDestination" ref="destination" /> </bean> <!-- 4.配置生产者 --> <bean id="springProducer" class="com.jahentao.integration.SpringProducer"> <property name="jmsTemplate" ref="jmsTemplate"/> </bean> <!--<bean id="springProducer2" class="com.jahentao.integration.SpringProducer2">--> <!--<property name="jmsTemplate" ref="jmsTemplate"/>--> <!--</bean>--> <!-- 5.配置消费者 --> <bean id="springConsumer" class="com.jahentao.integration.SpringConsumer"> <property name="jmsTemplate" ref="jmsTemplate"/> </bean> <!--<bean id="springConsumer2" class="com.jahentao.integration.SpringConsumer2"/>--> <!-- 6.消息监听容器 --> <!--<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsFactory" /> <property name="destination" ref="destination" /> <property name="messageListener" ref="springConsumer2" /> </bean> --></beans>
生产者消费者Demo
SpringProducer.java
package com.jahentao.integration;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Session;/** * Created with IntelliJ IDEA.<br> * Description: Spring整合ActiveMQ 生成者<br> * User: jahen<br> * Date: 2017-04-03<br> * Time: 14:42<br> */public class SpringProducer { //Spring的模板,封装了很多功能 private JmsTemplate jmsTemplate; public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } protected void send() { //使用JMSTemplate可以很简单的实现发送消息 jmsTemplate.send(new MessageCreator() { public Message createMessage(Session session) throws JMSException { System.out.println("发送消息: jmsTemplate send messages"); return session.createTextMessage("jmsTemplate send messages"); } }); }}
SpringConsumer.java
package com.jahentao.integration;import org.springframework.jms.core.JmsTemplate;import javax.jms.TextMessage;/** * Created with IntelliJ IDEA.<br> * Description: Spring整合ActiveMQ 消费者<br> * User: jahen<br> * Date: 2017-04-03<br> * Time: 14:44<br> */public class SpringConsumer { private JmsTemplate jmsTemplate; public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate; } //接收消息 protected void recive() { while (true) { try { //使用JMSTemplate接收消息 TextMessage txtmsg = (TextMessage) jmsTemplate.receive(); if (null != txtmsg) { System.out.println("--- 收到消息内容为: " + txtmsg.getText()); } else { break; } } catch (Exception e) { e.printStackTrace(); } } }}
JMSTest.java
package com.jahentao.integration;import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;import org.springframework.context.ApplicationContext;/** * Created with IntelliJ IDEA.<br> * Description: 测试ActiveMQ与Spring集成<br> * User: jahen<br> * Date: 2017-04-03<br> * Time: 15:21<br> */public class JMSTest { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml"); SpringProducer producer = (SpringProducer)applicationContext.getBean("springProducer"); producer.send(); SpringConsumer consumer = (SpringConsumer) applicationContext.getBean("springConsumer"); consumer.recive(); }}
运行结果
消费者配置监听
Spring 配置文件 修改
<!-- ... --><!-- 4.配置生产者 --><!--<bean id="springProducer" class="com.jahentao.integration.SpringProducer">--> <!--<property name="jmsTemplate" ref="jmsTemplate"/>--><!--</bean>--><bean id="springProducer2" class="com.jahentao.integration.SpringProducer2"> <property name="jmsTemplate" ref="jmsTemplate"/></bean><!-- 5.配置消费者 --><!--<bean id="springConsumer" class="com.jahentao.integration.SpringConsumer">--> <!--<property name="jmsTemplate" ref="jmsTemplate"/>--><!--</bean>--><bean id="springConsumer2" class="com.jahentao.integration.SpringConsumer2"/><!-- 6.消息监听容器 --><bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsFactory" /> <property name="destination" ref="destination" /> <property name="messageListener" ref="springConsumer2" /></bean><!-- ... -->
SpringConsumer2.java
package com.jahentao.integration;import org.springframework.jms.core.JmsTemplate;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageListener;import javax.jms.TextMessage;/** * Created with IntelliJ IDEA.<br> * Description: Spring整合ActiveMQ 消费者<br> * 配置监听器 * User: jahen<br> * Date: 2017-04-03<br> * Time: 14:44<br> */public class SpringConsumer2 implements MessageListener{ @Override public void onMessage(Message message) { TextMessage textMsg = (TextMessage) message; try { System.out.println("接收到了消息,消息内容是:" + textMsg.getText()); } catch (JMSException e) { e.printStackTrace(); } }}
JMSTest2.java
package com.jahentao.integration;import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;import org.springframework.context.ApplicationContext;/** * Created with IntelliJ IDEA.<br> * Description: 测试ActiveMQ与Spring集成 消费者监听消息<br> * User: jahen<br> * Date: 2017-04-03<br> * Time: 15:21<br> */public class JMSTest2 { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml"); SpringProducer2 producer = (SpringProducer2) applicationContext.getBean("springProducer2"); producer.send("你在哪里啊?"); producer.send("嗨,你好吗?"); // 消费者配置了消息监听 // 接收消息 }}
运行结果
代码托管在码云上
参考
ActiveMQ与Spring整合
结合Zookeeper整合ActiveMQ
0 0
- ActiveMQ(二)与Spring集成
- ActiveMQ(二) ActiveMQ + spring 集成
- Spring 集成 ActiveMQ 配置(二)
- ActiveMQ(二)-Spring集成JMS
- activemq与spring集成配置
- ActiveMQ基本应用(spring集成activemq)
- jms activeMQ与spring集成进阶篇(转载)
- (七)jms activeMQ与spring的集成
- jms activeMQ与spring集成进阶篇(转载)
- jms activeMQ与spring的集成(转载)
- ActiveMQ(实战三) 与spring的集成
- jms activeMQ与spring集成进阶篇
- jms activeMQ与spring的集成
- ActiveMQ入门实例及与Spring集成
- jms activeMQ与spring的集成
- Spring 与 ActiveMq的集成配置使用
- Spring与ActiveMQ的集成详解
- jms activeMQ与spring集成进阶篇
- Java多线程并发编程之二volatile
- c++非STL全排列
- Vmware安装Kali6.2(rolling)后续之 安装 VMware Tools
- linux实验3-网络服务配置
- C语言大数运算-减法篇
- ActiveMQ(二)与Spring集成
- 题目546Divideing Jewels多重背包问题
- springmvc使用Hibernate的校验框架validation
- 自顶向下分析一个简单的语音识别系统(五)
- QDUOJ 29 帅气的HYC与N皇后(最大独立集)
- MySQL笔记-procedure与function
- 插入排序、半分插入排序、希尔排序
- Android学习笔记之多线程间的异步通信
- python socket 创建tcp服务器和客户端