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