ActiveMQ实例2--Spring JMS发送消息

Posted 姜小妖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ActiveMQ实例2--Spring JMS发送消息相关的知识,希望对你有一定的参考价值。

参考文章:http://my.oschina.net/xiaoxishan/blog/381209#OSC_h3_7

一,步骤参照参考文献

二、新建的项目

三、补充

web.xml

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"  
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
 5     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  
 6     
 7     <display-name>activemq</display-name>
 8 
 9     <!-- Spring ApplicationContext配置文件的路径,可使用通配符,用于后面的Spring Context Loader -->
10     <context-param>
11         <param-name>contextConfigLocation</param-name>
12         <param-value>
13             classpath:applicationContext.xml
14         </param-value>
15     </context-param>
16 
17     <!--Spring ApplicationContext 载入 -->
18     <listener>
19         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
20     </listener>
21 
22     <!-- Spring MVC Servlet -->
23     <servlet>
24         <servlet-name>dispatcher</servlet-name>
25         <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>
26         <init-param>
27             <param-name>contextConfigLocation</param-name>
28             <param-value>classpath:DispatcherServlet.xml</param-value>
29         </init-param>
30         <load-on-startup>1</load-on-startup>
31     </servlet>
32     <servlet-mapping>
33         <servlet-name>dispatcher</servlet-name>
34         <url-pattern>/</url-pattern>
35     </servlet-mapping>
36 
37     
38     <welcome-file-list>
39         <welcome-file>index.html</welcome-file>
40     </welcome-file-list>
41 </web-app>
View Code

applicationContext.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3         xmlns="http://www.springframework.org/schema/beans"
 4         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5         xmlns:context="http://www.springframework.org/schema/context"
 6         xmlns:goldfish="http://www.fangdd.com/schema/goldfish"
 7         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 8           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
 9           http://www.fangdd.com/schema/goldfish http://www.fangdd.com/schema/goldfish/goldfish-1.0.0.xsd">
10 
11       <context:annotation-config/>
12       
13     <context:component-scan base-package="com.zp.test" >
14     </context:component-scan>
15       
16 
17     <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
18     <context:component-scan base-package="com.activemqtest.*"/>
19 
20     <!-- 配置JMS连接工厂 -->
21     <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
22         <property name="brokerURL" value="failover:(tcp://localhost:61616)" />
23     </bean>
24     
25     <!-- 定义消息队列(Queue) -->
26     <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
27         <!-- 设置消息队列的名字 -->
28         <constructor-arg>
29             <value>queue1</value>
30         </constructor-arg>
31     </bean>
32     
33     <!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 -->
34     <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
35         <property name="connectionFactory" ref="connectionFactory" />
36         <property name="defaultDestination" ref="queueDestination" />
37         <property name="receiveTimeout" value="10000" />
38     </bean>
39     
40     <!--queue消息生产者 -->
41     <bean id="producerService" class="com.activemqtest.serviceImpl.ProducerServiceImpl">
42         <property name="jmsTemplate" ref="jmsTemplate"></property>
43     </bean>
44 
45     <!--queue消息消费者 -->
46     <bean id="consumerService" class="com.activemqtest.serviceImpl.ConsumerServiceImpl">
47         <property name="jmsTemplate" ref="jmsTemplate"></property>
48     </bean>
49     
50     <!-- 定义消息队列(Queue),我们监听一个新的队列,queue2 -->
51     <bean id="queueDestination2" class="org.apache.activemq.command.ActiveMQQueue">
52         <!-- 设置消息队列的名字 -->
53         <constructor-arg>
54             <value>queue2</value>
55         </constructor-arg>
56     </bean>
57     
58     <!-- 配置消息队列监听者(Queue),代码下面给出,只有一个onMessage方法 -->
59     <bean id="queueMessageListener" class="com.activemqtest.serviceImpl.QueueMessageListener" />
60     
61     <!-- 消息监听容器(Queue),配置连接工厂,监听的队列是queue2,监听器是上面定义的监听器 -->
62     <bean id="jmsContainer"
63         class="org.springframework.jms.listener.DefaultMessageListenerContainer">
64         <property name="connectionFactory" ref="connectionFactory" />
65         <property name="destination" ref="queueDestination2" />
66         <property name="messageListener" ref="queueMessageListener" />
67     </bean>
68     <!-- 定义消息主题(Topic) -->
69     <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
70         <constructor-arg>
71             <value>JY_topic</value>
72         </constructor-arg>
73     </bean>
74     <!-- 配置JMS模板(Topic),pubSubDomain="true"-->
75     <bean id="topicJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
76         <property name="connectionFactory" ref="connectionFactory" />
77         <property name="defaultDestination" ref="topicDestination" />
78         <property name="pubSubDomain" value="true" />
79         <property name="receiveTimeout" value="10000" />
80     </bean>
81     <!--topic消息发布者 -->
82     <bean id="topicProvider" class="com.activemqtest.serviceImpl.TopicProvider">
83         <property name="topicJmsTemplate" ref="topicJmsTemplate"></property>
84     </bean>
85     <!-- 消息主题监听者 和 主题监听容器 可以配置多个,即多个订阅者 -->
86     <!-- 消息主题监听者(Topic) -->
87     <bean id="topicMessageListener" class="com.activemqtest.serviceImpl.TopicMessageListener" />
88     <!-- 主题监听容器 (Topic) -->
89     <bean id="topicJmsContainer"
90         class="org.springframework.jms.listener.DefaultMessageListenerContainer">
91         <property name="connectionFactory" ref="connectionFactory" />
92         <property name="destination" ref="topicDestination" />
93         <property name="messageListener" ref="topicMessageListener" />
94     </bean>
95     
96     </beans>
View Code

DispactcherServlet.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xmlns:mvc="http://www.springframework.org/schema/mvc"
 6        xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
 7         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
 8         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 9     
10     <context:annotation-config />    
11     <context:component-scan base-package="com.zp.test.controller">
12         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
13     </context:component-scan>
14  </beans>
View Code

四、运行结果

 

因为运行了两遍,所以是双数

五、遇到的问题

问题:Java.lang.IllegalStateException: Failed to load ApplicationContext 

原因:因为applicationContext里的包没有与实际的包对应,或者是没有注解导入对应的变量

 

以上是关于ActiveMQ实例2--Spring JMS发送消息的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出JMS--Spring和ActiveMQ整合的完整实例

在Spring下集成ActiveMQ

深入浅出JMS--ActiveMQ简单的HelloWorld实例

深入浅出JMS--ActiveMQ简单的HelloWorld实例

ActiveMQ简单的HelloWorld实例

深入浅出JMS--Spring和ActiveMQ整合的完整实例