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以免造成不可估量的错误