当前位置: 首页 >服务端 > Spring mvc4 + ActiveMQ 整合

Spring mvc4 + ActiveMQ 整合

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

一、配置部分

二、代码部分

三、页面部分

四、Controller控制器

五、效果展示

六、加入监听器

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

 

一、配置部分

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

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<?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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  version="3.0">  <display-name>Archetype Created Web Application</display-name><!-- 加载spring的配置文件,例如hibeate、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-patte>/</url-patte></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-patte>/*</url-patte>  </filter-mapping>  </web-app>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<?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 mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

spring-mvc-dispatch.xml如下

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<?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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

 

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<?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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

二、代码部分

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
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;@Servicepublic 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 {retu 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 {retu session.createTextMessage(msg);  }});}}
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

 

消费者ConsumerService.java,代码如下

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
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;@Servicepublic 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();}retu tm;} }
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

 

三、页面部分

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<%@ 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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

 

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<%@ 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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

 

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<%@ 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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

四、Controller控制器

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
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;@Controllerpublic class WelcomeController {@RequestMapping(value="/welcome",method=RequestMethod.GET)public ModelAndView welcome(){System.out.println("------------welcome");ModelAndView mv = new ModelAndView();mv.setViewName("welcome");retu mv;}}
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
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;@Controllerpublic 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");retu 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");retu 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");retu 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();retu mv;}}
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

五、效果展示

首先访问欢迎页,如下

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

 

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

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

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

六、加入监听器

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

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

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
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();}}}
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

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

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记
<!-- 配置消息队列监听者(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>
Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

3.测试

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

后台输出如下

Spring mvc4 + ActiveMQ 整合 _ JavaClub全栈架构师技术笔记

作者:V青山绿水
来源链接:https://www.cnblogs.com/ruiati/p/7111199.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/112276.html

标签:ActiveMQ
分享给朋友:

“Spring mvc4 + ActiveMQ 整合” 的相关文章