转载:http://www.cnblogs.com/leiOOlei/p/5075402.html

一、配置部分

二、代码部分

三、页面部分

四、Controller控制器

五、效果展示

六、加入监听器

七、最最重要的,别忘了打赏

一、配置部分

ActiveMQ的安装这就不说了,很简单,

这个例子采用maven构建,首先看一下pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gzframe.demo</groupId><artifactId>gzframe</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>gzframe Maven Webapp</name><url>http://maven.apache.org</url><!-- 版本管理 --><properties><springframework>4.1.8.RELEASE</springframework><javax.servlet>3.1.0</javax.servlet></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>test</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency>    <groupId>javax.servlet</groupId>    <artifactId>servlet-api</artifactId><version>${javax.servlet}</version></dependency><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${springframework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${springframework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${springframework}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${springframework}</version></dependency><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-jms</artifactId>  <version>${springframework}</version>  </dependency><!-- xbean 如<amq:connectionFactory /> --><dependency><groupId>org.apache.xbean</groupId><artifactId>xbean-spring</artifactId><version>3.16</version></dependency><!-- activemq --><dependency>  <groupId>org.apache.activemq</groupId>  <artifactId>activemq-core</artifactId>  <version>5.7.0</version></dependency> <dependency>  <groupId>org.apache.activemq</groupId>  <artifactId>activemq-pool</artifactId>  <version>5.12.1</version>  </dependency>  </dependencies><build><finalName>gzframe</finalName></build>
</project>

接下来看一下web.xml,如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"version="3.0"><display-name>Archetype Created Web Application</display-name><!-- 加载spring的配置文件,例如hibernate、jms等集成 --><context-param>  <param-name>contextConfigLocation</param-name>  <param-value>classpath:spring-root.xml;classpath:activemq.xml;</param-value>  </context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>springMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc-dispatch.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springMVC</servlet-name><url-pattern>/</url-pattern></servlet-mapping><!-- 处理编码格式 --><filter>  <filter-name>characterEncodingFilter</filter-name>  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <init-param>  <param-name>encoding</param-name>  <param-value>UTF-8</param-value>  </init-param>  <init-param>  <param-name>forceEncoding</param-name>  <param-value>true</param-value>  </init-param>  </filter>  <filter-mapping>  <filter-name>characterEncodingFilter</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

其中spring-root.xml 很简单,负责加载一些spring的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"><context:component-scan base-package="com.gzframe.demo.entity" /><mvc:annotation-driven /></beans>

spring-mvc-dispatch.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"><context:component-scan base-package="com.gzframe.demo.mvc.controller" /><mvc:annotation-driven /><bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean>
</beans>

activemq.xml是关键的配置,如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:amq="http://activemq.apache.org/schema/core"xmlns:jms="http://www.springframework.org/schema/jms"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.1.xsdhttp://www.springframework.org/schema/jmshttp://www.springframework.org/schema/jms/spring-jms-4.1.xsdhttp://activemq.apache.org/schema/corehttp://activemq.apache.org/schema/core/activemq-core-5.12.1.xsd"><context:component-scan base-package="com.gzframe.demo.activemq" /><mvc:annotation-driven /><amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://192.168.150.61:61616" userName="admin" password="admin" /><!-- 配置JMS连接工长 --><bean id="connectionFactory"class="org.springframework.jms.connection.CachingConnectionFactory"><constructor-arg ref="amqConnectionFactory" /><property name="sessionCacheSize" value="100" /></bean><!-- 定义消息队列(Queue) --><bean id="demoQueueDestination" class="org.apache.activemq.command.ActiveMQQueue"><!-- 设置消息队列的名字 --><constructor-arg><value>gzframe.demo</value></constructor-arg></bean><!-- 配置JMS模板(Queue),Spring提供的JMS工具类,它发送、接收消息。 --><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory" /><property name="defaultDestination" ref="demoQueueDestination" /><property name="receiveTimeout" value="10000" /><!-- true是topic,false是queue,默认是false,此处显示写出false --><property name="pubSubDomain" value="false" /></bean>    </beans>

二、代码部分

消息生产者ProducerService.java,代码如下

package com.gzframe.demo.activemq.producer;import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;@Service
public class ProducerService {@Resource(name="jmsTemplate")private JmsTemplate jmsTemplate;/*** 向指定队列发送消息*/public void sendMessage(Destination destination, final String msg) {System.out.println("向队列" + destination.toString() + "发送了消息------------" + msg);jmsTemplate.send(destination, new MessageCreator() {public Message createMessage(Session session) throws JMSException {return session.createTextMessage(msg);}});}/*** 向默认队列发送消息*/public void sendMessage(final String msg) {String destination =  jmsTemplate.getDefaultDestination().toString();System.out.println("向队列" +destination+ "发送了消息------------" + msg);jmsTemplate.send(new MessageCreator() {public Message createMessage(Session session) throws JMSException {return session.createTextMessage(msg);}});}}

消费者ConsumerService.java,代码如下

package com.gzframe.demo.activemq.consumer;import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;@Service
public class ConsumerService {@Resource(name="jmsTemplate")private JmsTemplate jmsTemplate;/*** 接收消息*/public TextMessage receive(Destination destination) {TextMessage tm = (TextMessage) jmsTemplate.receive(destination);try {System.out.println("从队列" + destination.toString() + "收到了消息:\t"+ tm.getText());} catch (JMSException e) {e.printStackTrace();}return tm;}}

三、页面部分

1.首先写一个欢迎页,welcome.jsp如下,

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome</title>
</head>
<body><h1>Welcome!!!</h1><h2><a href="producer">去发消息</a></h2><h2><a href="receive">从队列中取一个消息</a></h2>
</body>
</html>

2.然后是生产者页面jms_producer.jsp,如下

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JMS-Producer</title>
</head>
<body><h1>JMS-Producer!!!</h1><form action="onsend" method="post">MessageText:<textarea name="message">${time }</textarea><input type="submit" value="提交" /></form><h2><a href="welcome">返回主页</a></h2>
</body>
</html>

3.接收者页面queue_receive.jsp,如下

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Receive</title>
</head>
<body><h1>${textMessage }</h1><h2><a href="welcome">返回主页</a></h2>
</body>
</html>

四、Controller控制器

1.首先controller到首页welcome页,WelcomeController.java如下:

package com.gzframe.demo.mvc.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;@Controller
public class WelcomeController {@RequestMapping(value="/welcome",method=RequestMethod.GET)public ModelAndView welcome(){System.out.println("------------welcome");        ModelAndView mv = new ModelAndView();mv.setViewName("welcome");return mv;}}

2.然后定义消息生产和消费的控制器,DemoController.java,代码如下

package com.gzframe.demo.mvc.controller;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import com.gzframe.demo.activemq.consumer.ConsumerService;
import com.gzframe.demo.activemq.producer.ProducerService;@Controller
public class DemoController {//队列名gzframe.demo@Resource(name="demoQueueDestination")private Destination demoQueueDestination;//队列消息生产者@Resource(name="producerService")private ProducerService producer;//队列消息消费者@Resource(name="consumerService")private ConsumerService consumer;@RequestMapping(value="/producer",method=RequestMethod.GET)public ModelAndView producer(){System.out.println("------------go producer");Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String time = dateFormat.format( now ); System.out.println(time);ModelAndView mv = new ModelAndView();mv.addObject("time", time);mv.setViewName("jms_producer");        return mv;}@RequestMapping(value="/onsend",method=RequestMethod.POST)public ModelAndView producer(@RequestParam("message") String message) {System.out.println("------------send to jms");ModelAndView mv = new ModelAndView();producer.sendMessage(demoQueueDestination, message);mv.setViewName("welcome");return mv;}@RequestMapping(value="/receive",method=RequestMethod.GET)public ModelAndView queue_receive() throws JMSException {System.out.println("------------receive message");ModelAndView mv = new ModelAndView();TextMessage tm = consumer.receive(demoQueueDestination);mv.addObject("textMessage", tm.getText());mv.setViewName("queue_receive");return mv;}/** ActiveMQ Manager Test*/@RequestMapping(value="/jms",method=RequestMethod.GET)public ModelAndView jmsManager() throws IOException {System.out.println("------------jms manager");ModelAndView mv = new ModelAndView();mv.setViewName("welcome");JMXServiceURL url = new JMXServiceURL("");JMXConnector connector = JMXConnectorFactory.connect(url);connector.connect();MBeanServerConnection connection = connector.getMBeanServerConnection();return mv;}}

五、效果展示

首先访问欢迎页,如下

然后点“去发消息”,进入到如下页面,默认消息框一已经填写了时间,点击提交,会将时间“2015-12-25 11:51:25”提交到qctivemq服务器中,

提交完成后,根据页面代码,会转到欢迎页,在欢迎页中既可以点击“从队列中取一个消息”,效果如下

可以看到,取到的消息即为刚才提交的时间,demo成功!

经过以上操作后的后台输出如下

六、加入监听器

以上例子中,接收消息是靠手动点击接收,下面将配置一个消息监听器“QueueMessageListener.java”,负责自动监听qctiveMQ中的队列消息,

一旦有新消息后,将自动读取消费,妈妈再也不用担心漏掉消息啦!

1.首先写一个监听的类“QueueMessageListener.java”,必须实现“MessageListerner”接口,代码如下

package com.gzframe.demo.activemq.listener;import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;public class QueueMessageListener implements MessageListener {//当收到消息后,自动调用该方法@Overridepublic void onMessage(Message message) {TextMessage tm = (TextMessage) message;try {System.out.println("QueueMessageListener监听到了文本消息:\t"+ tm.getText());//do something ...} catch (JMSException e) {e.printStackTrace();}}}

2.写完监听类后,打开activemq.xml配置文件,需要将这个监听配置到文件中,这样,应用加载后,即会加载此监听。
将以下的配置段加入到activemq.xml中

<!-- 配置消息队列监听者(Queue) --><bean id="queueMessageListener" class="com.gzframe.demo.activemq.listener.QueueMessageListener" /><!-- 显示注入消息监听容器(Queue),配置连接工厂,监听的目标是demoQueueDestination,监听器是上面定义的监听器 --><bean id="queueListenerContainer"class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="connectionFactory" /><property name="destination" ref="demoQueueDestination" /><property name="messageListener" ref="queueMessageListener" /></bean>

3.测试

配置完成后,重新启动服务,去消息发送页提交消息,提交完毕后,监听检测到,将立即消费掉,并在后台打印出来

后台输出如下

转载于:https://www.cnblogs.com/ruiati/p/7111199.html

Spring mvc4 + ActiveMQ 整合相关推荐

  1. Spring和ActiveMQ整合的完整实例

     Spring和ActiveMQ整合的完整实例 前言 这篇博文,我们基于Spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了 ...

  2. 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

    转载:http://blog.csdn.net/jiuqiyuliang/article/details/48758203 第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模 ...

  3. JMS学习(4):--Spring和ActiveMQ整合的完整实例

    前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PU ...

  4. Sping+ActiveMQ整合

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  5. ActiveMQ整合spring

    主要讲解点: 使用ActiveMQ完成发短信功能(重点) 2.Kindeditor上传图片及图片管理器功能的实现(对应后台代码是重点, Kindeditor参照demo会用就行) 宣传活动的保存功能( ...

  6. spring和activemq的结合(五)

    转载:http://blog.csdn.net/jiuqiyuliang/article/details/48758203 前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat ...

  7. 消息驱动 微服务器,消息驱动的微服务-Spring Cloud Stream整合RocketMQ

    系列文章导航: Spring Cloud Alibaba微服务解决方案 常用MQ产品的选择 目前主流的MQ产品有kafka.RabbitMQ.ActiveMQ.RocketMQ等.在MQ选型时可以参照 ...

  8. SpringBoot ActiveMQ 整合使用

    介绍 ActiveMQ 它是 Apache 出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 ...

  9. Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!

    前一篇文章介绍了Spring Cloud Gateway的一些基础知识点,今天陈某就来唠一唠网关层面如何做限流? 文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流 ...

最新文章

  1. GoogleNet - Going deeper with convolutions
  2. ElasticSearch嵌套查询以及注意事项
  3. OpenVAS 开放式漏洞评估系统--安装及说明
  4. delphi memo 查找字符 下行插入_Vim高手,从来不用鼠标2——替换、撤销、缩进、查找
  5. 4.元组tuple:戴上了枷锁的列表
  6. python输入一组数据、进行简单的统计_《利用Python进行数据分析》学习笔记——第二章(3)...
  7. cacti 被监控机器snmp 配置
  8. apache sgoop 导入数据到 oracle、导出数据到 oracle 实现
  9. mysql数据库内存分配_MySQL OOM 系列一 Linux内存分配
  10. C语言函数多个返回值
  11. zz 跟风小结一下孕期~
  12. java经典问题算法大全_10道java经典算法!每一题都能提升你的java能力!
  13. php window open,【php】window.open()弹出窗口被拦截.
  14. 从Java程序员到架构师,从工程师到技术专家,迷茫之路
  15. Windows cmd快捷键
  16. 每天一个小技巧【1】·TextMeshPro的中文设置
  17. springboot优缺点
  18. 30个最常见oCPC问题
  19. 2021年遥感类SCI期刊中科院分区排名与影响因子汇总
  20. 微软75亿美元收购ZeniMax及其旗下工作室;KPS同意21亿美元收购Garrett全部资产 | 美通企业日报...

热门文章

  1. 还在迷茫于前端如何入门和进阶?万字指南让你不再迷茫!
  2. ERROR 1064 (42000): ; check the manual that corresponds to y
  3. mysql觸發器_mysql觸發器
  4. JavaScript二进制、八进制和十六进制数值
  5. Linux权限z代表什么,linux用户与权限使用方法
  6. oracle 切割字符串加引号_Oracle 在字符串中输入单引号或特殊字符
  7. android 距离设置多少dp核实,【Android学习】android布局中几个距离单位的区别:px、dp、sp...
  8. 计算机专业审核作业指导书,专业审核作业指导书
  9. STM8单片机ADC模拟看门狗功能实现
  10. RT-Thread中自定义 FinSH 命令