Spring整合ActiveMQ测试

第一部分:创建项目(使用maven)

--注意:使用IDEA创建maven普通项目还是聚合项目,都可以不用勾选,直接点next。

然后填入坐标和模块的名字

 

然后点击左上角的+号,选择web。

 

在新打开的页面下会显示web选项,这里的路径改为\src\main\webapp ,再修改web.xml文件的路径。

 

IDEA不会pom.xml文件默认生成jar文件,要在pom.xml添加<packaging>war</packaging>构建时生成war文件。

第二步:导入pom依赖

导包说明:

Spring核心包+AOP

common-logging

activemq核心包

spring整合jms包

jsp相关依赖

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6     <groupId>org.abcdit.activemq</groupId>
 7     <artifactId>activemq-demo4-spring</artifactId>
 8     <packaging>war</packaging>
 9     <version>1.0-SNAPSHOT</version>
10
11
12     <dependencies>
13         <!-- ActiveMQ client客户端完整jar包依赖 -->
14         <dependency>
15             <groupId>org.apache.activemq</groupId>
16             <artifactId>activemq-all</artifactId>
17             <version>5.9.1</version>
18         </dependency>
19         <!-- activemq spring -->
20         <dependency>
21             <groupId>org.apache.activemq</groupId>
22             <artifactId>activemq-spring</artifactId>
23             <version>5.9.1</version>
24         </dependency>
25         <dependency>
26             <groupId>org.apache.activemq</groupId>
27             <artifactId>activemq-pool</artifactId>
28             <version>5.9.1</version>
29         </dependency>
30
31         <!-- Spring-JMS插件相关jar包依赖 -->
32         <dependency>
33             <groupId>org.springframework</groupId>
34             <artifactId>spring-jms</artifactId>
35             <version>4.3.16.RELEASE</version>
36         </dependency>
37         <!-- Spring框架上下文jar包依赖 -->
38         <dependency>
39             <groupId>org.springframework</groupId>
40             <artifactId>spring-context</artifactId>
41             <version>4.3.16.RELEASE</version>
42         </dependency>
43         <!-- SpringMVC插件jar包依赖 -->
44         <dependency>
45             <groupId>org.springframework</groupId>
46             <artifactId>spring-webmvc</artifactId>
47             <version>4.3.16.RELEASE</version>
48         </dependency>
49         <!-- jsp相关 -->
50         <dependency>
51             <groupId>jstl</groupId>
52             <artifactId>jstl</artifactId>
53             <version>1.2</version>
54         </dependency>
55         <dependency>
56             <groupId>javax.servlet</groupId>
57             <artifactId>javax.servlet-api</artifactId>
58             <version>3.0.1</version>
59             <scope>provided</scope>
60         </dependency>
61         <dependency>
62             <groupId>javax.servlet.jsp</groupId>
63             <artifactId>javax.servlet.jsp-api</artifactId>
64             <version>2.2.1</version>
65             <scope>provided</scope>
66         </dependency>
67
68         <!--spring jms-->
69         <dependency>
70             <groupId>org.springframework</groupId>
71             <artifactId>spring-jms</artifactId>
72             <version>4.3.16.RELEASE</version>
73         </dependency>
74
75     </dependencies>
76 </project>

第二部分:spring整合springmvc

第一步:修改web.xml,配置springmvc核心控制器

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app 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            version="3.0">
 7     <!-- 配置编码过滤器,防止post请求乱码 -->
 8     <filter>
 9         <filter-name>characterEncodingFilter</filter-name>
10         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
11         <init-param>
12             <param-name>encoding</param-name>
13             <param-value>UTF-8</param-value>
14         </init-param>
15     </filter>
16     <filter-mapping>
17         <filter-name>characterEncodingFilter</filter-name>
18         <url-pattern>/*</url-pattern>
19     </filter-mapping>
20
21     <!--核心控制器-->
22     <servlet>
23         <servlet-name>dispatcherServlet</servlet-name>
24         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
25
26         <!--指定配置文件-->
27         <init-param>
28             <param-name>contextConfigLocation</param-name>
29             <param-value>classpath:spring-*.xml</param-value>
30         </init-param>
31         <load-on-startup>1</load-on-startup>
32     </servlet>
33     <servlet-mapping>
34         <servlet-name>dispatcherServlet</servlet-name>
35         <url-pattern>*.action</url-pattern>
36     </servlet-mapping>
37 </web-app>

第二步:配置spring-mvc.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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 7
 8     <context:component-scan base-package="org.abcdit.acticemq"/>
 9     <mvc:annotation-driven/>
10 </beans>

第三步:创建相关jsp页面

-订单页面order.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <form action="/save.action" method="post">
11             用户编号:<input type="text" name="userid"><br>
12             订单金额:<input type="text" name="price"><br>
13             <input type="submit" value="提交">
14     </form>
15 </body>
16 </html>

-成功页面success.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     订单提交成功!!!请稍后去结算中心支付。。。
11 </body>
12 </html>

第四步:java代码实现

创建订单Order类

--注意事项

ActiveMQ处理对象时,对象必须实现序列化

--修改Order类,实现序列化接口

 1 package org.abcdit.acticemq.pojo;
 2
 3 import java.io.Serializable;
 4
 5 public class Order implements Serializable {
 6
 7     private static final long serialVersionUID = -6760045770187998139L;
 8
 9     private Integer id;
10
11     private Integer userid;
12
13     private float price;
14
15   //补全get/set方法
16 }

创建OrderController类

 1 package org.abcdit.acticemq.ordercontroller;
 2
 3 import org.abcdit.acticemq.pojo.Order;
 4 import org.abcdit.acticemq.producer.OrderProducer;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8
 9 @Controller
10 public class OrderController {
11
12     @Autowired
13     private OrderProducer orderProducer;
14
15     @RequestMapping("/save.action")
16     public String save(Order order){
17
18         System.out.println("当前订单提交的用户是:"+order.getUserid()+",订单金额:"+order.getPrice());
19
20         orderProducer.sendToMQ(order);
21
22         return "/success.jsp";
23
24     }
25
26 }

第三部分:Spring整合ActiveMQ

第一步:搭建ActiveMQ服务器。

第二步:创建消息生成者OrderProducer。

 1 package org.abcdit.acticemq.producer;
 2
 3 import org.abcdit.acticemq.pojo.Order;
 4 import org.springframework.beans.factory.annotation.Autowired;
 5 import org.springframework.jms.core.JmsTemplate;
 6 import org.springframework.jms.core.MessageCreator;
 7 import org.springframework.stereotype.Controller;
 8
 9 import javax.jms.JMSException;
10 import javax.jms.Message;
11 import javax.jms.ObjectMessage;
12 import javax.jms.Session;
13
14 @Controller
15 public class OrderProducer {
16
17     @Autowired
18     private JmsTemplate jmsTemplate;
19
20     //注意:内部类调用外部类属性,需要用final修饰
21     public void sendToMQ(final Order order){
22
23         jmsTemplate.send("spring-test", new MessageCreator() {
24             @Override
25             public Message createMessage(Session session) throws JMSException {
26
27                 //注意事项:需要被传到的对象,必须要继承序列接口
28                 ObjectMessage objectMessage = session.createObjectMessage();
29                 return objectMessage;
30             }
31         });
32     }
33
34
35 }

第三步:创建消息消费者OrderListener类

 1 package org.abcdit.acticemq.listener;
 2
 3 import org.abcdit.acticemq.pojo.Order;
 4 import org.springframework.stereotype.Component;
 5
 6 import javax.jms.JMSException;
 7 import javax.jms.Message;
 8 import javax.jms.MessageListener;
 9 import javax.jms.ObjectMessage;
10
11 @Component
12 public class OrderListener implements MessageListener {
13
14
15     @Override
16     public void onMessage(Message message) {
17
18         try {
19             ObjectMessage objectMessage = (ObjectMessage) message;
20             Order order = (Order) objectMessage.getObject();
21
22             System.out.println("消费者:"+order.getUserid()+",价格:"+order.getPrice());
23
24         } catch (JMSException e) {
25             e.printStackTrace();
26         }
27
28     }
29 }

第四步:spring整合ActiveMQ

-创建spring-jms.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" xmlns:jms="http://www.springframework.org/schema/jms"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd">
 5
 6     <!--1.配置activemq连接工厂
 7     使用连接池好处:链接只需要初始化一次,每次要使用的时候,直接从连接池获取,用完之后还给连接池。省去了每次创建、销毁连接的时间。
 8     -->
 9     <bean name="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
10         <property name="connectionFactory">
11             <!--配置连接池-->
12             <bean class="org.apache.activemq.ActiveMQConnectionFactory" >
13                 <property name="userName" value="admin"/>
14                 <property name="password" value="admin"/>
15                 <property name="brokerURL" value="tcp://192.168.253.112:61616"/>
16             </bean>
17         </property>
18         <property name="maxConnections" value="30"/>
19     </bean>
20
21     <!--2.配置缓存工厂,提供对象并发效率 [可选,仅仅是缓存作用]-->
22     <bean name="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
23         <!--指定1配置的工厂源-->
24         <property name="targetConnectionFactory" ref="pooledConnectionFactory"/>
25         <!-- 配置缓存session数 -->
26         <property name="sessionCacheSize" value="10"/>
27     </bean>
28
29     <!--3.获得操作对象,JMSTemplate-->
30     <bean name="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
31         <!--指定连接工厂-->
32         <property name="connectionFactory" ref="cachingConnectionFactory"/>
33
34     </bean>
35
36     <!--4.配置消费者的监听器-->
37     <jms:listener-container acknowledge="auto" connection-factory="cachingConnectionFactory" response-destination-type="queue">
38         <jms:listener destination="spring-test" ref="orderListener"/>
39     </jms:listener-container>
40
41 </beans>

第五步:修改web.xml文件,加载jms配置

 1 <!-- 配置springmvc核心控制器 -->
 2   <servlet>
 3           <servlet-name>dispatcherServlet</servlet-name>
 4           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 5
 6           <init-param>
 7               <param-name>contextConfigLocation</param-name>
 8               <!-- <param-value>classpath:springmvc.xml</param-value> -->
 9               <param-value>classpath:spring*.xml</param-value>
10           </init-param>
11
12           <load-on-startup>1</load-on-startup>
13   </servlet>
14   <servlet-mapping>
15           <servlet-name>dispatcherServlet</servlet-name>
16           <url-pattern>*.action</url-pattern>
17   </servlet-mapping>

--注入OrderProducer,修改业务逻辑(已经注入)

 1 @Controller
 2 public class OrderController {
 3     @Autowired
 4     private OrderProducer producer;
 5
 6     @RequestMapping("/save.action")
 7     public String save(Order order){
 8
 9 //        System.out.println("当前提交的订单用户是:"+order.getUserid()+",订单金额:"+order.getPrice());
10
11         producer.sendToMQ(order);
12
13         return "/success.jsp";
14     }
15 }

查看ActiveMQ控制台

Uncategorized exception occurred during JMS processing; nested exception is javax.jms.JMSException: Error while attempting to add new Connection to the pool; nested exception is javax.jms.JMSException: Could not connect to broker URL: tcp://192.168.253.112:61616. Reason: java.net.ConnectException: Connection timed out: connect

出现Could not connect to broker URL: tcp://192.168.253.112:61616报错,

1.在spring-jsm.xml文件配置activemq连接工厂时,配置连接池-brokerURL地址出错!

最后,整合成功!

原文地址:https://www.cnblogs.com/abcdjava/p/11407119.html

时间: 2024-11-07 08:29:33

Spring整合ActiveMQ测试的相关文章

Spring整合ActiveMQ

1.管理ActiveMQ 地址  http://localhost:8161/admin/ 默认用户和密码:admin=admin 运行发送者,eclipse控制台输出,如下图: 此时,我们先看一下ActiveMQ服务器,Queues内容如下: 我们可以看到创建了一个名称为HelloWorld的消息队列,队列中有10条消息未被消费,我们也可以通过Browse查看是哪些消息,如下图: 如果这些队列中的消息,被删除,消费者则无法消费. 我们继续运行一下消费者,eclipse控制台打印消息,如下: 

Spring整合ActiveMQ及多个Queue消息监听的配置

消息队列(MQ)越来越火,在java开发的项目也属于比较常见的技术,MQ的相关使用也成java开发人员必备的技能.笔者公司采用的MQ是ActiveMQ,且消息都是用的点对点的模式.本文记录了实现Spring整合ActivateMQ的全过程及如何使用MQ,便于后续查阅. 一.项目的搭建 采用maven构建项目,免去了copy jar包的麻烦.因此,我们创建了一个java类型的Maven Project (1)项目结构图 先把项目结构图看一下,便于对项目的理解. (2)pom.xml 我们需要加入以

Spring整合junit测试

本节内容: Spring整合junit测试的意义 Spring整合junit测试 一.Spring与整合junit测试的意义 在没整合junit之前,我们在写测试方法时,需要在每个方法中手动创建容器,获取对象,比如下面的代码,红色部分都是重复的代码.如果要测试很多功能的话,每次都得手动去创建容器,很麻烦.如果你测试的两个功能中用到某个相同的对象,获取对象的代码也得写一遍. public class test { @Test public void test1(){ //1.创建容器对象(创建Sp

spring 整合 ActiveMQ

1.1     JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑.对于消息的传递有两种类型,一种是点对点的,即一个生产者和一个消费者一一对应:另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收. 1.2  

Java消息队列-Spring整合ActiveMq

1.概述 首先和大家一起回顾一下Java 消息服务,在我之前的博客<Java消息队列-JMS概述>中,我为大家分析了: 消息服务:一个中间件,用于解决两个活多个程序之间的耦合,底层由Java 实现. 优势:异步.可靠 消息模型:点对点,发布/订阅 JMS中的对象  然后在另一篇博客<Java消息队列-ActiveMq实战>中,和大家一起从0到1的开启了一个ActiveMq 的项目,在项目开发的过程中,我们对ActiveMq有了一定的了解: 多种语言和协议编写客户端.语言: Java

Spring整合ActiveMQ:spring+JMS+ActiveMQ+Tomcat

一.目录结构 相关jar包 二.关键配置activmq.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi=&quo

spring 整合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:p="http://www.springframework.org/s

Spring整合Junit测试框架

在工作中,很多项目是基于ssm框架的web项目,在编写完代码需要进行测试.但是对象都交由Spring容器进行对象管理之后,测试变得复杂了.因为所有的Bean都需要在applicationContext.xml中加载好,之后再通过@Resource去取得.如果每次都要整个业务流做的差不多了再去测试,这样效率很低,很多同学可能是通过web端发请求进行触发测试.有时候,我们仅仅是需要测试我们dao层sql是否正确,但是确要重启服务器,在浏览器发送请求进行测试,或者写个定时器触发测试.这很费事费时.所以

Spring整合activeMQ消息队列

1.配置JMS <!-- Spring提供的JMS工具类,它可以进行消息发送.接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> <property name="conne