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