Spring mvc4 + ActiveMQ 整合
转载: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 整合相关推荐
- Spring和ActiveMQ整合的完整实例
Spring和ActiveMQ整合的完整实例 前言 这篇博文,我们基于Spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了 ...
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
转载:http://blog.csdn.net/jiuqiyuliang/article/details/48758203 第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模 ...
- JMS学习(4):--Spring和ActiveMQ整合的完整实例
前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了Point-To-Point的异步队列消息和PU ...
- Sping+ActiveMQ整合
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- ActiveMQ整合spring
主要讲解点: 使用ActiveMQ完成发短信功能(重点) 2.Kindeditor上传图片及图片管理器功能的实现(对应后台代码是重点, Kindeditor参照demo会用就行) 宣传活动的保存功能( ...
- spring和activemq的结合(五)
转载:http://blog.csdn.net/jiuqiyuliang/article/details/48758203 前言 这篇博文,我们基于spring+JMS+ActiveMQ+Tomcat ...
- 消息驱动 微服务器,消息驱动的微服务-Spring Cloud Stream整合RocketMQ
系列文章导航: Spring Cloud Alibaba微服务解决方案 常用MQ产品的选择 目前主流的MQ产品有kafka.RabbitMQ.ActiveMQ.RocketMQ等.在MQ选型时可以参照 ...
- SpringBoot ActiveMQ 整合使用
介绍 ActiveMQ 它是 Apache 出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 ...
- Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!
前一篇文章介绍了Spring Cloud Gateway的一些基础知识点,今天陈某就来唠一唠网关层面如何做限流? 文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流 ...
最新文章
- GoogleNet - Going deeper with convolutions
- ElasticSearch嵌套查询以及注意事项
- OpenVAS 开放式漏洞评估系统--安装及说明
- delphi memo 查找字符 下行插入_Vim高手,从来不用鼠标2——替换、撤销、缩进、查找
- 4.元组tuple:戴上了枷锁的列表
- python输入一组数据、进行简单的统计_《利用Python进行数据分析》学习笔记——第二章(3)...
- cacti 被监控机器snmp 配置
- apache sgoop 导入数据到 oracle、导出数据到 oracle 实现
- mysql数据库内存分配_MySQL OOM 系列一 Linux内存分配
- C语言函数多个返回值
- zz 跟风小结一下孕期~
- java经典问题算法大全_10道java经典算法!每一题都能提升你的java能力!
- php window open,【php】window.open()弹出窗口被拦截.
- 从Java程序员到架构师,从工程师到技术专家,迷茫之路
- Windows cmd快捷键
- 每天一个小技巧【1】·TextMeshPro的中文设置
- springboot优缺点
- 30个最常见oCPC问题
- 2021年遥感类SCI期刊中科院分区排名与影响因子汇总
- 微软75亿美元收购ZeniMax及其旗下工作室;KPS同意21亿美元收购Garrett全部资产 | 美通企业日报...
热门文章
- 还在迷茫于前端如何入门和进阶?万字指南让你不再迷茫!
- ERROR 1064 (42000): ; check the manual that corresponds to y
- mysql觸發器_mysql觸發器
- JavaScript二进制、八进制和十六进制数值
- Linux权限z代表什么,linux用户与权限使用方法
- oracle 切割字符串加引号_Oracle 在字符串中输入单引号或特殊字符
- android 距离设置多少dp核实,【Android学习】android布局中几个距离单位的区别:px、dp、sp...
- 计算机专业审核作业指导书,专业审核作业指导书
- STM8单片机ADC模拟看门狗功能实现
- RT-Thread中自定义 FinSH 命令