前言

这篇博客记录 activemq5.11整合spring4.2.3的过程,免得以后忘记了

1、工程结构

2、pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.jacky</groupId>
  5. <artifactId>activemq_spring4</artifactId>
  6. <packaging>war</packaging>
  7. <version>1.0-SNAPSHOT</version>
  8. <name>activemq_spring4 Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <!--<properties>
  11. <srping.version>4.1.0.RELEASE</srping.version>
  12. <log4j.version>1.2.17</log4j.version>
  13. </properties>-->
  14.  
  15. <dependencyManagement>
  16. <dependencies>
  17. <dependency>
  18. <groupId>io.spring.platform </groupId>
  19. <artifactId>platform-bom</artifactId>
  20. <version>2.0.0.RELEASE</version>
  21. <type>pom</type>
  22. <scope>import</scope>
  23. </dependency>
  24. </dependencies>
  25. </dependencyManagement>
  26.  
  27. <dependencies>
  28. <dependency>
  29. <groupId>junit</groupId>
  30. <artifactId>junit</artifactId>
  31. <!-- <version>3.8.1</version>-->
  32. <scope>test</scope>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework</groupId>
  36. <artifactId>spring-test</artifactId>
  37. <!-- <version>${srping.version}</version>-->
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework</groupId>
  41. <artifactId>spring-core</artifactId>
  42. <!-- <version>${srping.version}</version>-->
  43. </dependency>
  44. <dependency>
  45. <groupId>org.springframework</groupId>
  46. <artifactId>spring-oxm</artifactId>
  47. <!--<version>${srping.version}</version>-->
  48. </dependency>
  49. <dependency>
  50. <groupId>org.springframework</groupId>
  51. <artifactId>spring-tx</artifactId>
  52. <!--<version>${srping.version}</version>-->
  53. </dependency>
  54. <dependency>
  55. <groupId>org.springframework</groupId>
  56. <artifactId>spring-jdbc</artifactId>
  57. <!--<version>${srping.version}</version>-->
  58. </dependency>
  59. <dependency>
  60. <groupId>org.springframework</groupId>
  61. <artifactId>spring-aop</artifactId>
  62. <!-- <version>${srping.version}</version>-->
  63. </dependency>
  64. <dependency>
  65. <groupId>org.springframework</groupId>
  66. <artifactId>spring-context</artifactId>
  67. <!-- <version>${srping.version}</version>-->
  68. </dependency>
  69. <dependency>
  70. <groupId>org.springframework</groupId>
  71. <artifactId>spring-context-support</artifactId>
  72. <!--<version>${srping.version}</version>-->
  73. </dependency>
  74. <dependency>
  75. <groupId>org.springframework</groupId>
  76. <artifactId>spring-expression</artifactId>
  77. <!--<version>${srping.version}</version>-->
  78. </dependency>
  79. <dependency>
  80. <groupId>org.springframework</groupId>
  81. <artifactId>spring-orm</artifactId>
  82. <!--<version>${srping.version}</version>-->
  83. </dependency>
  84. <dependency>
  85. <groupId>org.springframework</groupId>
  86. <artifactId>spring-web</artifactId>
  87. <!--<version>${srping.version}</version>-->
  88. </dependency>
  89. <dependency>
  90. <groupId>org.springframework</groupId>
  91. <artifactId>spring-webmvc</artifactId>
  92. <!--<version>${srping.version}</version>-->
  93. </dependency>
  94. <dependency>
  95. <groupId>org.apache.activemq</groupId>
  96. <artifactId>activemq-all</artifactId>
  97. <version>5.11.1</version>
  98. </dependency>
  99. <dependency>
  100. <groupId>org.springframework</groupId>
  101. <artifactId>spring-jms</artifactId>
  102. <!--<version>4.1.5.RELEASE</version>-->
  103. </dependency>
  104. <dependency>
  105. <groupId>org.apache.xbean</groupId>
  106. <artifactId>xbean-spring</artifactId>
  107. <version>4.4</version>
  108. </dependency>
  109. <dependency>
  110. <groupId>commons-logging</groupId>
  111. <artifactId>commons-logging</artifactId>
  112. <!-- <version>1.2</version>-->
  113. </dependency>
  114. </dependencies>
  115. <build>
  116. <finalName>activemq_spring4</finalName>
  117. </build>
  118. </project>

这里使用spring-io自动控制spring版本

3、ActiveMQ.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:amq="http://activemq.apache.org/schema/core"
  5. xmlns:jms="http://www.springframework.org/schema/jms"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  10. http://www.springframework.org/schema/jms
  11. http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
  12. http://activemq.apache.org/schema/core
  13. http://activemq.apache.org/schema/core/activemq-core-5.8.0.xsd">
  14.  
  15. <!-- ActiveMQ 连接工厂 -->
  16. <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供-->
  17. <!-- 如果连接网络:tcp://ip:61616;未连接网络:tcp://localhost:61616 以及用户名,密码-->
  18. <amq:connectionFactory id="amqConnectionFactory"
  19. brokerURL="tcp://127.0.0.1:61616" userName="admin" password="admin" />
  20.  
  21. <!-- Spring Caching连接工厂 -->
  22. <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
  23. <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
  24. <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
  25. <property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
  26. <!-- 同上,同理 -->
  27. <!-- <constructor-arg ref="amqConnectionFactory" /> -->
  28. <!-- Session缓存数量 -->
  29. <property name="sessionCacheSize" value="100" />
  30. </bean>
  31.  
  32. <!-- Spring JmsTemplate 的消息生产者 start-->
  33.  
  34. <!-- 定义JmsTemplate的Queue类型 -->
  35. <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
  36. <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
  37. <constructor-arg ref="connectionFactory" />
  38. <!-- 非pub/sub模型(发布/订阅),即队列模式 -->
  39. <property name="pubSubDomain" value="false" />
  40. </bean>
  41.  
  42. <!-- 定义JmsTemplate的Topic类型 -->
  43. <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
  44. <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
  45. <constructor-arg ref="connectionFactory" />
  46. <!-- pub/sub模型(发布/订阅) -->
  47. <property name="pubSubDomain" value="true" />
  48. </bean>
  49.  
  50. <!--Spring JmsTemplate 的消息生产者 end-->
  51.  
  52. <!-- 消息消费者 start-->
  53.  
  54. <!-- 定义Queue监听器 -->
  55. <jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="client">
  56. <jms:listener destination="jacky.queue" ref="queueReceiver1"/>
  57. <jms:listener destination="jacky.queue" ref="queueReceiver2"/>
  58. </jms:listener-container>
  59.  
  60. <!-- 定义Topic监听器 -->
  61. <jms:listener-container destination-type="topic" container-type="default" connection-factory="connectionFactory" acknowledge="auto">
  62. <jms:listener destination="jacky.topic" ref="topicReceiver1"/>
  63. <jms:listener destination="jacky.topic" ref="topicReceiver2"/>
  64. </jms:listener-container>
  65.  
  66. <!-- 消息消费者 end -->
  67. </beans>

4、applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 查找最新的schemaLocation 访问 http://www.springframework.org/schema/ -->
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xmlns:amq="http://activemq.apache.org/schema/core"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans
  8. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  9. http://www.springframework.org/schema/context
  10. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  11. http://activemq.apache.org/schema/core
  12. http://activemq.apache.org/schema/core/activemq-core-5.9.0.xsd">
  13.  
  14. <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
  15.  
  16. <!-- 配置扫描路径 -->
  17. <context:component-scan base-package="com.jacky">
  18. <!-- 只扫描Service,也可以添加Repostory,但是要把Controller排除在外,Controller由spring-mvc.xml去加载 -->
  19. <!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" /> -->
  20. <!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" /> -->
  21. <!-- <context:include-filter type="annotation" expression="org.springframework.stereotype.Component" /> -->
  22. <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  23. </context:component-scan>
  24.  
  25. </beans>

5、spring-mvc.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 查找最新的schemaLocation 访问 http://www.springframework.org/schema/ -->
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:aop="http://www.springframework.org/schema/aop"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  9. xsi:schemaLocation="http://www.springframework.org/schema/aop
  10. http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  11. http://www.springframework.org/schema/beans
  12. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  13. http://www.springframework.org/schema/context
  14. http://www.springframework.org/schema/context/spring-context-4.0.xsd
  15. http://www.springframework.org/schema/mvc
  16. http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  17. http://www.springframework.org/schema/tx
  18. http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
  19.  
  20. <!-- 启用MVC注解 -->
  21. <mvc:annotation-driven />
  22.  
  23. <!-- 静态资源文件,不会被Spring MVC拦截 -->
  24. <mvc:resources location="/resources/" mapping="/resources/**"/>
  25.  
  26. <!-- 指定Sping组件扫描的基本包路径 -->
  27. <context:component-scan base-package="com.jacky" >
  28. <!-- 这里只扫描Controller,不可重复加载Service -->
  29. <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
  30. </context:component-scan>
  31.  
  32. <!-- JSP视图解析器-->
  33. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  34. <property name="prefix" value="/WEB-INF/views/" />
  35. <property name="suffix" value=".jsp" />
  36. <!-- 定义其解析视图的order顺序为1 -->
  37. <property name="order" value="1" />
  38. </bean>
  39.  
  40. </beans>

6、log4j.properties

  1. ### direct log messages to stdout and logFile###
  2. log4j.rootCategory=INFO, stdout,logFile
  3.  
  4. # OpenSymphony Stuff
  5. log4j.logger.com.opensymphony=INFO
  6. log4j.logger.org.apache.struts2=INFO
  7. log4j.logger.org.apache.commons=INFO
  8.  
  9. # Spring Stuff
  10. log4j.logger.org.springframework=INFO
  11. log4j.logger.org.springframework.oxm=INFO
  12.  
  13. # Hibernate Stuff
  14. log4j.logger.org.hibernate=INFO
  15. log4j.logger.org.hibernate.type=INFO
  16. log4j.logger.org.hibernate.tool.hbm2ddl=INFO
  17.  
  18. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  19. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  20. log4j.appender.stdout.layout.ConversionPattern=[\u65F6\u95F4\:%d{yyyy-MM-dd hh\:mm\:ss}] [\u7EA7\u522B\:%p] [\u7C7B\:%c] [\u6D88\u606F\:%m] %n
  21.  
  22. log4j.appender.logFile=org.apache.log4j.RollingFileAppender
  23. log4j.appender.logFile.File=D\:\\demo.log
  24. log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
  25. log4j.appender.logFile.layout.ConversionPattern=[\u65F6\u95F4\:%d{yyyy-MM-dd hh\:mm\:ss}] [\u7EA7\u522B\:%p] [\u7C7B\:%c] [\u6D88\u606F\:%m] %n
  26. log4j.appender.logFile.MaxFileSize = 5MB
  27. log4j.appender.logFile.MaxBackupIndex =3

7、web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. version="3.0">
  6. <display-name>activemq</display-name>
  7.  
  8. <!-- Log4J Start -->
  9. <context-param>
  10. <param-name>log4jConfigLocation</param-name>
  11. <param-value>classpath:log4j.properties</param-value>
  12. </context-param>
  13. <context-param>
  14. <param-name>log4jRefreshInterval</param-name>
  15. <param-value>6000</param-value>
  16. </context-param>
  17. <context-param>
  18. <param-name>log4jExposeWebAppRoot</param-name>
  19. <param-value>false</param-value>
  20. </context-param>
  21. <!-- Spring Log4J config -->
  22. <listener>
  23. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  24. </listener>
  25. <!-- Log4J End -->
  26.  
  27. <!-- Spring 编码过滤器 start -->
  28. <filter>
  29. <filter-name>characterEncoding</filter-name>
  30. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  31. <init-param>
  32. <param-name>encoding</param-name>
  33. <param-value>UTF-8</param-value>
  34. </init-param>
  35. <init-param>
  36. <param-name>forceEncoding</param-name>
  37. <param-value>true</param-value>
  38. </init-param>
  39. </filter>
  40. <filter-mapping>
  41. <filter-name>characterEncoding</filter-name>
  42. <url-pattern>/*</url-pattern>
  43. </filter-mapping>
  44. <!-- Spring 编码过滤器 End -->
  45.  
  46. <!-- Spring Application Context Listener Start -->
  47. <context-param>
  48. <param-name>contextConfigLocation</param-name>
  49. <param-value>classpath*:applicationContext.xml,classpath*:ActiveMQ.xml</param-value>
  50. </context-param>
  51. <listener>
  52. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  53. </listener>
  54. <!-- Spring Application Context Listener End -->
  55.  
  56. <!-- Spring MVC Config Start -->
  57. <servlet>
  58. <servlet-name>SpringMVC</servlet-name>
  59. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  60.  
  61. <init-param>
  62. <param-name>contextConfigLocation</param-name>
  63. <param-value>classpath:spring-mvc.xml</param-value>
  64. </init-param>
  65. <load-on-startup>1</load-on-startup>
  66. </servlet>
  67. <servlet-mapping>
  68. <servlet-name>SpringMVC</servlet-name>
  69. <!-- Filter all resources -->
  70. <url-pattern>/</url-pattern>
  71. </servlet-mapping>
  72. <!-- Spring MVC Config End -->
  73.  
  74. </web-app>

8、MqController.java

  1. package com.jacky.controller;
  2.  
  3. import com.jacky.mq.producer.queue.QueueSender;
  4. import com.jacky.mq.producer.topic.TopicSender;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestParam;
  8. import org.springframework.web.bind.annotation.ResponseBody;
  9.  
  10. import javax.annotation.Resource;
  11.  
  12. /**
  13. * Created by jacky on 2017/3/27 0027.
  14. */
  15. @Controller
  16. @RequestMapping("/activemq")
  17. public class MqController {
  18. @Resource
  19. QueueSender queueSender;
  20. @Resource
  21. TopicSender topicSender;
  22.  
  23. /**
  24. * 发送消息到队列
  25. * Queue队列:仅有一个订阅者会收到消息,消息一旦被处理就不会存在队列中
  26. * @param message
  27. * @return String
  28. */
  29. @ResponseBody
  30. @RequestMapping("queueSender")
  31. public String queueSender(@RequestParam("message")String message){
  32. String opt="";
  33. try {
  34. queueSender.send("jacky.queue", message);
  35. opt = "suc";
  36. } catch (Exception e) {
  37. opt = e.getCause().toString();
  38. }
  39. return opt;
  40. }
  41.  
  42. /**
  43. * 发送消息到主题
  44. * Topic主题 :放入一个消息,所有订阅者都会收到
  45. * 这个是主题目的地是一对多的
  46. * @param message
  47. * @return String
  48. */
  49. @ResponseBody
  50. @RequestMapping("topicSender")
  51. public String topicSender(@RequestParam("message")String message){
  52. String opt = "";
  53. try {
  54. topicSender.send("jacky.topic", message);
  55. opt = "suc";
  56. } catch (Exception e) {
  57. opt = e.getCause().toString();
  58. }
  59. return opt;
  60. }
  61. }

9、QueueReceiver1.java

  1. package com.jacky.mq.consumer.queue;
  2.  
  3. import org.springframework.stereotype.Component;
  4.  
  5. import javax.jms.JMSException;
  6. import javax.jms.Message;
  7. import javax.jms.MessageListener;
  8. import javax.jms.TextMessage;
  9.  
  10. /**
  11. * 监听消息队列
  12. */
  13. @Component
  14. public class QueueReceiver1 implements MessageListener{
  15.  
  16. @Override
  17. public void onMessage(Message message) {
  18. try {
  19.  
  20. System.out.println("QueueReceiver1接收到消息:"+((TextMessage)message).getText());
  21. message.acknowledge();//手动向broker确认接收成功,如果发生异常,就不反回ack
  22. } catch (JMSException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }

10、QueueReceiver2.java

  1. package com.jacky.mq.consumer.queue;
  2.  
  3. import org.springframework.stereotype.Component;
  4.  
  5. import javax.jms.JMSException;
  6. import javax.jms.Message;
  7. import javax.jms.MessageListener;
  8. import javax.jms.TextMessage;
  9.  
  10. /**
  11. * Created by Administrator on 2017/3/27 0027.
  12. */
  13. @Component
  14. public class QueueReceiver2 implements MessageListener {
  15. @Override
  16. public void onMessage(Message message) {
  17. try {
  18. System.out.println("QueueReceiver2接收到消息:"+((TextMessage)message).getText());
  19. message.acknowledge();////手动向broker确认接收成功,如果发生异常,就不反回ack
  20. } catch (JMSException e) {
  21. e.printStackTrace();
  22. }
  23. }
  24. }

11、TopicReceiver1.java

  1. package com.jacky.mq.consumer.topic;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.MessageListener;
  6. import javax.jms.TextMessage;
  7.  
  8. import org.springframework.stereotype.Component;
  9.  
  10. /**
  11. *
  12. * @author liang
  13. * @description Topic消息监听器
  14. *
  15. */
  16. @Component
  17. public class TopicReceiver1 implements MessageListener{
  18.  
  19. @Override
  20. public void onMessage(Message message) {
  21. try {
  22. System.out.println("TopicReceiver1接收到消息:"+((TextMessage)message).getText());
  23. } catch (JMSException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. }

12、TopicReceiver2.java

  1. package com.jacky.mq.consumer.topic;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.MessageListener;
  6. import javax.jms.TextMessage;
  7.  
  8. import org.springframework.stereotype.Component;
  9.  
  10. /**
  11. *
  12. * @author liang
  13. * @description Topic消息监听器
  14. *
  15. */
  16. @Component
  17. public class TopicReceiver2 implements MessageListener{
  18.  
  19. @Override
  20. public void onMessage(Message message) {
  21. try {
  22. System.out.println("TopicReceiver2接收到消息:"+((TextMessage)message).getText());
  23. } catch (JMSException e) {
  24. e.printStackTrace();
  25. }
  26. }
  27.  
  28. }

13、QueueSender.java

  1. package com.jacky.mq.producer.queue;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.Session;
  6.  
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.beans.factory.annotation.Qualifier;
  9. import org.springframework.jms.core.JmsTemplate;
  10. import org.springframework.jms.core.MessageCreator;
  11. import org.springframework.stereotype.Component;
  12.  
  13. /**
  14. *
  15. * @author liang
  16. * @description 队列消息生产者,发送消息到队列
  17. *
  18. */
  19. @Component("queueSender")
  20. public class QueueSender {
  21.  
  22. @Autowired
  23. @Qualifier("jmsQueueTemplate")
  24. private JmsTemplate jmsTemplate;//通过@Qualifier修饰符来注入对应的bean
  25.  
  26. /**
  27. * 发送一条消息到指定的队列(目标)
  28. * @param queueName 队列名称
  29. * @param message 消息内容
  30. */
  31. public void send(String queueName,final String message){
  32. jmsTemplate.send(queueName, new MessageCreator() {
  33. @Override
  34. public Message createMessage(Session session) throws JMSException {
  35. return session.createTextMessage(message);
  36. }
  37. });
  38. }
  39.  
  40. }

14、TopicSender.java

  1. package com.jacky.mq.producer.topic;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.Session;
  6.  
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.beans.factory.annotation.Qualifier;
  9. import org.springframework.jms.core.JmsTemplate;
  10. import org.springframework.jms.core.MessageCreator;
  11. import org.springframework.stereotype.Component;
  12.  
  13. /**
  14. *
  15. * @author liang
  16. * @description Topic生产者发送消息到Topic
  17. *
  18. */
  19.  
  20. @Component("topicSender")
  21. public class TopicSender {
  22.  
  23. @Autowired
  24. @Qualifier("jmsTopicTemplate")
  25. private JmsTemplate jmsTemplate;
  26.  
  27. /**
  28. *
  29. * @param topicName
  30. * @param message
  31. */
  32. public void send(String topicName,final String message){
  33. jmsTemplate.send(topicName, new MessageCreator() {
  34. @Override
  35. public Message createMessage(Session session) throws JMSException {
  36. return session.createTextMessage(message);
  37. }
  38. });
  39. }
  40.  
  41. }

15、index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <%
  4. String path = request.getContextPath();
  5. System.out.println(path);
  6. String basePath = request.getScheme() + "://"
  7. + request.getServerName() + ":" + request.getServerPort()
  8. + path + "/";
  9. System.out.println(basePath);
  10. %>
  11.  
  12. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  13. <html>
  14. <head>
  15. <base href="<%=basePath%>">
  16. <title>ActiveMQ Demo程序</title>
  17. <meta http-equiv="pragma" content="no-cache">
  18. <meta http-equiv="cache-control" content="no-cache">
  19. <meta http-equiv="expires" content="0">
  20. <script type="text/javascript" src="<%=basePath%>resources/jquery-1.11.0.min.js"></script>
  21. <style type="text/css">
  22. .h1 {
  23. margin: 0 auto;
  24. }
  25.  
  26. #producer{
  27. width: 48%;
  28. border: 1px solid blue;
  29. height: 80%;
  30. align:center;
  31. margin:0 auto;
  32. }
  33.  
  34. body{
  35. text-align :center;
  36. }
  37. div {
  38. text-align :center;
  39. }
  40. textarea{
  41. width:80%;
  42. height:100px;
  43. border:1px solid gray;
  44. }
  45. button{
  46. background-color: rgb(62, 156, 66);
  47. border: none;
  48. font-weight: bold;
  49. color: white;
  50. height:30px;
  51. }
  52. </style>
  53. <script type="text/javascript">
  54.  
  55. function send(controller){
  56. if($("#message").val()==""){
  57. $("#message").css("border","1px solid red");
  58. return;
  59. }else{
  60. $("#message").css("border","1px solid gray");
  61. }
  62. $.ajax({
  63. type: 'post',
  64. url:'<%=basePath%>activemq/'+controller,
  65. dataType:'text',
  66. data:{"message":$("#message").val()},
  67. success:function(data){
  68. if(data=="suc"){
  69. $("#status").html("<font color=green>发送成功</font>");
  70. setTimeout(clear,1000);
  71. }else{
  72. $("#status").html("<font color=red>"+data+"</font>");
  73. setTimeout(clear,5000);
  74. }
  75. },
  76. error:function(data){
  77. $("#status").html("<font color=red>ERROR:"+data["status"]+","+data["statusText"]+"</font>");
  78. setTimeout(clear,5000);
  79. }
  80.  
  81. });
  82. }
  83.  
  84. function clear(){
  85. $("#status").html("");
  86. }
  87.  
  88. </script>
  89. </head>
  90.  
  91. <body>
  92. <h1>Hello ActiveMQ</h1>
  93. <div id="producer">
  94. <h2>Producer</h2>
  95. <textarea id="message"></textarea>
  96. <br>
  97. <button onclick="send('queueSender')">发送Queue消息</button>
  98. <button onclick="send('topicSender')">发送Topic消息</button>
  99. <br>
  100. <span id="status"></span>
  101. </div>
  102. </body>
  103. </html>

github地址:https://github.com/jacky-lulu/activemq5_spring4

欢迎关注

activemq5.11整合spring4.2.3的更多相关文章

  1. Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...

  2. Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)

    1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...

  3. 使用IDEA整合spring4+spring mvc+hibernate

    配置文件 spring-mvc.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans x ...

  4. 五子棋Web版的开发(二)--整合Spring4.3+hibernate4+Struts2.3

    拖了这么久才把ssh框架给整合完毕,期间发现自己对SSH的知识真的是知之甚少.在整合期间遇到了无数的坑,我还是先把项目地址发一下吧 首先我遇到的第一个问题是 CreateQuery is not va ...

  5. springBoot(11)---整合Active消息队列

    Springboot整合Active消息队列 简单理解: Active是Apache公司旗下的一个消息总线,ActiveMQ是一个开源兼容Java Message Service(JMS) 面向消息的 ...

  6. SSM整合——spring4.*配置案例

    导入spring4.* 相关的jar包和依赖包即可 1.web.xml <?xml version="1.0" encoding="UTF-8"?> ...

  7. 11点睛Spring4.1-Property Editor

    11.1 Propert Editor property editor是JavaBeans API的一项特性,用来字符和属性值之间的互相转换(如2014-03-02和Date类型的互相转换) spri ...

  8. 【快学springboot】11.整合redis实现session共享

    前言 这里都是基于前面的项目基础上的.springboot整合redis非常的方便,这也是springboot的宗旨,简化配置.这篇文章就教大家如何使用springboot整合redis来实现sess ...

  9. 【原创】整合Spring4+Hibernate4+Struts2时NullPointerException问题解决

    1.开场白 相信SSH初学者肯定遇到过这个问题,但是又是百思不得其解,明白了之后就恍然大悟. 2.问题描述 程序实现过程是UserAction中调用UserService,UserService的实现 ...

随机推荐

  1. jquery实现 批量右移

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  2. protobuf配置与使用

    Protobuf配置与安装 1 安装与配置 1.protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2.下载 ...

  3. HDUOJ-Counting Triangles

    Counting Triangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. php Zend虚拟机

    在前⾯的章节中,我们了解到⼀个PHP⽂件在服务器端的执⾏过程包括以下两个⼤的过程:1. 递给php程序需要执⾏的⽂件, php程序完成基本的准备⼯作后启动PHP及Zend引擎, 加载注册的扩展模块.2 ...

  5. android通过USB使用真机调试程序

    我的机子很老,开启个android模拟器都要好几分钟,但幸亏有个android的真机,这样直接在andriod手机上调试也是一个不错的选择.下面我就介绍 一下使用android手机来调试android ...

  6. android 手机红外遥控器实现

    经过连续几天的编制,安卓手机代码终于完成了,目前已经将我宿舍,家里,集控室的红外遥控电气设备完好的遥控了,另外还遥控了我的D7000相机,不错终于完工了.代码分为二类:各种电视.相机.等等遥控编码最简 ...

  7. 将Log4J的日志内容发送到agent的source

    项目中使用log4j打印的内容同时传输到flume 1.flume端 flume的agent配置内容如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 a1.sour ...

  8. 命令行查询DELL服务器信息序列号

    Windows 获取序列号>wmic bios get serialnumber 获取机型信息>wmic csproduct get vendor,name,identifyingnumb ...

  9. mvn test 执行testng测试用例

    maven项目,把testng用例防止test目录下,配置pom.xml 文件如下,执行mvn test 能自动执行testng里面的用例 <project xmlns="http:/ ...

  10. linux的fork()函数具体解释 子进程复制父进程什么

    #include<stdio.h>   #include<string.h>   #include<stdlib.h>   #include<unistd.h ...