ActiveMQ整合spring结合项目开发流程(生产者和消费者)总结

  1 一:生产者代码编写:
  2     1.配置pom.xml引入相关坐标
  3         <dependencies>
  4             <!-- spring开发测试 -->
  5             <dependency>
  6                 <groupId>junit</groupId>
  7                 <artifactId>junit</artifactId>
  8                 <version>4.12</version>
  9             </dependency>
 10             <dependency>
 11                 <groupId>org.springframework</groupId>
 12                 <artifactId>spring-core</artifactId>
 13                 <version>4.1.7.RELEASE</version>
 14             </dependency>
 15             <dependency>
 16                 <groupId>org.springframework</groupId>
 17                 <artifactId>spring-test</artifactId>
 18                 <version>4.1.7.RELEASE</version>
 19             </dependency>
 20             <!-- activemq -->
 21             <dependency>
 22                 <groupId>org.apache.activemq</groupId>
 23                 <artifactId>activemq-all</artifactId>
 24                 <version>5.14.0</version>
 25             </dependency>
 26             <!-- spring整合mq开发 -->
 27             <dependency>
 28                 <groupId>org.springframework</groupId>
 29                 <artifactId>spring-jms</artifactId>
 30                 <version>4.1.7.RELEASE</version>
 31             </dependency>
 32         </dependencies>
 33     2.配置applicationContext.xml文件
 34         <!-- ActiveMQ 连接工厂 -->
 35         <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
 36         <!-- 如果连接网络:tcp://ip:61616;未连接网络:tcp://localhost:61616 以及用户名,密码 -->
 37         <amq:connectionFactory id="amqConnectionFactory"
 38             brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
 39         <!-- Spring Caching连接工厂 -->
 40         <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
 41         <bean id="connectionFactory"
 42             class="org.springframework.jms.connection.CachingConnectionFactory">
 43             <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
 44             <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
 45             <!-- 同上,同理 -->
 46             <!-- <constructor-arg ref="amqConnectionFactory" /> -->
 47             <!-- Session缓存数量 -->
 48             <property name="sessionCacheSize" value="100" />
 49         </bean>
 50         <!-- 定义JmsTemplate的Queue类型 -->
 51         <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
 52             <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
 53             <constructor-arg ref="connectionFactory" />
 54             <!-- 非pub/sub模型(发布/订阅),即队列模式 -->
 55             <property name="pubSubDomain" value="false" />
 56         </bean>
 57         <!-- 定义JmsTemplate的Topic类型 -->
 58         <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
 59             <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
 60             <constructor-arg ref="connectionFactory" />
 61             <!-- pub/sub模型(发布/订阅) -->
 62             <property name="pubSubDomain" value="true" />
 63         </bean>
 64     3.编写生产者类
 65         //注入JmsTemplate对象
 66         @Autowired
 67         private JmsTemplate jmsTemplate;
 68         //编写方法生产消息队列(使用map集合存放消息队列)
 69         jmsTemplate.send("activeCode",new MessageCreator() {
 70             
 71             @Override
 72             public Message createMessage(Session session) throws JMSException {
 73                 MapMessage map = session.createMapMessage();
 74                 map.setString("telephone", model.getTelephone());//消息之一
 75                 map.setString("randomCode", randomCode);//消息之二
 76                 return map;
 77             }
 78         });
 79 二:消费者代码编写:
 80     1.配置web.xml中的spring监听器
 81         <!-- spring配置文件位置 -->
 82         <context-param>
 83             <param-name>contextConfigLocation</param-name>
 84             <param-value>classpath:applicationContext.xml</param-value>
 85         </context-param>
 86         <!-- spring核心监听器 -->
 87         <listener>
 88             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 89         </listener>
 90     2.配置applicationContext.xml文件
 91             <!-- ActiveMQ 连接工厂 -->
 92             <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
 93             <!-- 如果连接网络:tcp://ip:61616;未连接网络:tcp://localhost:61616 以及用户名,密码 -->
 94             <amq:connectionFactory id="amqConnectionFactory"
 95                 brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
 96             <!-- Spring Caching连接工厂 -->
 97             <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
 98             <bean id="connectionFactory"
 99                 class="org.springframework.jms.connection.CachingConnectionFactory">
100                 <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
101                 <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
102                 <!-- Session缓存数量 -->
103                 <property name="sessionCacheSize" value="100" />
104             </bean>
105             <!-- 扫描消费者类所在的包 -->
106             <context:component-scan base-package="cn.itcast.activemq.consumer" />
107             <!-- 定义Queue监听器 -->
108             <jms:listener-container destination-type="queue"
109                 container-type="default" connection-factory="connectionFactory"
110                 acknowledge="auto">
111                 <jms:listener destination="生产者定义的消息名称" ref="消费者类名首字母小写即可" />
112             </jms:listener-container>
113             <!-- 定义Topic监听器 -->
114             <jms:listener-container destination-type="topic"
115                 container-type="default" connection-factory="connectionFactory"
116                 acknowledge="auto">
117                 <jms:listener destination="生产者定义的消息名称" ref="消费者类名首字母小写即可" />
118             </jms:listener-container>
119     3.编写消费者类
120         @Servicer
121         public class 消费者 implements MessageListener(){
122             //实现MessageListener中的方法
123             public void onMessage(Message message) {
124                 MapMessage mapMessage = (TextMessage) message;
125                 try {
126                     System.out.println("消费者消费的信息为:手机号:" 
127                     + mapMessage.getString("telephone")
128                     +",验证码信息是:"+ mapMessage.getString("msg"));
129                 } catch (JMSException e) {
130                     e.printStackTrace();
131                 }
132             }
133         }
134     4.配置pom.xml中的tomcat启动坐标
135         //引入和生产者相同的jar包的坐标文件
136         //配置启动端口号为9009
137          <build>
138             <plugins>
139                 <plugin>
140                     <groupId>org.codehaus.mojo</groupId>
141                     <artifactId>tomcat-maven-plugin</artifactId>
142                     <version>1.1</version>
143                     <configuration>
144                         <port>9009</port>
145                     </configuration>
146                 </plugin>
147             </plugins>
148           </build>
149           //最好继承其他的父项目中的pom.xml以免造成不可估量的错误
原文地址:https://www.cnblogs.com/yshang/p/8080092.html