spring整合MQ
---恢复内容开始---
一、 导入依赖
<dependencies> <!-- ActiveMQ客户端完整jar包依赖 --> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.9.0</version> </dependency> <!-- ActiveMQ和Spring整合配置文件标签处理jar包依赖 --> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>4.5</version> </dependency> <!-- Spring-JMS插件相关jar包依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- Spring框架上下文jar包依赖 --> 严重怀疑这个不用 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.1.6.RELEASE</version> </dependency> <!-- SpringMVC插件jar包依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.1.6.RELEASE</version> </dependency> </dependencies> <build> <plugins> <!-- 配置Tomcat插件 --> 这个可以不用 <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <port>9099</port> <path>/</path> </configuration> </plugin> </plugins> </build>
二、 定义pojo Order.class
package cn.gzsxt.jms.pojo;
import java.io.Serializable;
import java.util.Date;
/**
* 定义消息载体类型. 即要在ActiveMQ中传递的数据实体类型.
* 消息载体对象必须实现接口java.io.Serializable, 因为消息需要在网络中传递,要求必须可序列化
*
* @author lyq
public class Order implements Serializable{
选第二个
private static final long serialVersionUID = 4631909346042146827L;
private String id;
private String nick;
private Long price;
private Date createTime;
public Order() {
super();
// TODO Auto-generated constructor stub
}
get set 方法
@Override
public String toString() {
return "Order [id=" + id + ", nick=" + nick + ", price=" + price + ", createTime=" + createTime + "]";
}
}
三、 定义消费者 OrderReciever.java
/** * 消息消费者代码, 此类型实现接口MessageListener, 用于监听处理ActiveMQ服务中的消息 * * @author lyq */ @Component public class OrderReciever implements MessageListener{ @Override 实现的方法 public void onMessage(Message message) { try{ ObjectMessage objectMassage = (ObjectMessage) message; Order order = (Order) objectMassage.getObject(); /** * 模拟将订单写入数据库 */ System.out.println("the order is : " + order); }catch(Exception e){ e.printStackTrace(); } } }
四 、定义生产者OrderProducer.java
@Component public class OrderProducer { @Autowired //Autowired是根据类型注入值。 private JmsTemplate jmsTemplate; jms处理实现类通过这个类可以发送数据到队列里 @Value("${MQ_QUEUE}") private String MQ_QUEUE; public void sendToMQ(final Order order){ 匿名内部类要访问外部变量需要final jmsTemplate.send(MQ_QUEUE, new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { Message message = session.createObjectMessage(order); return message; } }); } }
等同于
//4. 创建目的地, 目的地命名即队列命名, 消息消费者需要通过此命名访问对应的队列
destination = session.createQueue("text-msg");
// 5. 创建消息生成者, 创建的消息生成者与某目的地对应, 即方法参数目的地.
producer = session.createProducer(destination);
//6 .创建消息对象 创建一个文本消息, 此消息对象中保存要传递的文本数据.
message = session.createTextMessage(msg); //createTextMessage 因为是文本信息
//7.将消息对象发送到队列
producer.send(message);
五 、 定义Controller
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderProducer orderProducer;
@RequestMapping(value="/save.do",method=RequestMethod.POST)
public String save(Order order){
orderProducer.sendToMQ(order);
return "/success.jsp";
}
}
六 、 Spring整合Mq
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:amq(core)="http://activemq.apache.org/schema/core" xmlns:jms ="http://www.springframework.org/schema/jms" <!-- ActiveMQ 真实连接工厂 --> <!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 --> <!-- 需提供访问路径tcp://ip:61616;以及用户名,密码 --> <amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://192.168.56.4:61616" userName="admin" password="admin" /> <!-- Spring Caching连接工厂 --> <!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory --> <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <!-- 对应真实的可以产生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="amqConnectionFactory"></property> <!-- 可以设置Session缓存数量 --> <property name="sessionCacheSize" value="100" /> </bean> <!-- 消息生产者模板对象的生成 --> <!-- 定义JmsTemplate对象. 此类型由Spring框架JMS组件提供. 用于访问ActiveMQ使用. --> <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate"> <!--这里对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> 他需要提供一个连接工厂给对象,才知道那个连接 <constructor-arg ref="connectionFactory" /> <!-- 非pub/sub模型(发布/订阅),即队列模式, 默认数据可省略配置 --> <!-- <property name="pubSubDomain" value="false" /> --> </bean> <!-- 定义生成者对象 --> <bean id="orderProducer" class="cn.gzsxt.jms.producer.OrderProducer"> <!-- 为属性赋值 --> <property name="template" ref="jmsQueueTemplate"></property> </bean> <!--消息生产者 end --> <!-- 消息消费者 start --> <!-- 定义消息监听器, 此组件为spring-jms组件定义. 可以一次注册若干消息监听器. 属性解释: 1. destination-type - 目的地类型, queue代表消息队列 可选值: queue | topic | durableTopic queue - 默认值. 代表消息队列 topic - 代表消息队列集合 durableTopic - 持久化的消息队列集合. ActiveMQ会保证消息的消费者一定接收到此消息. 2. container-type - 容器类型 可选值: default | simple default - 默认值. 默认容器类型, 对应DefaultMessageListenerContainer simple - 简单容器类型, 对应SimpleMessageListenerContainer 3. connection-factory - 链接工厂, 注入的是Spring-JMS组件提供的链接工厂对象. acknowledge - 确认方式 | transacted auto - 默 可选值: auto | client | dups-ok认值, 即自动确认消息 client - 客户端确认消息 dups-ok - 可使用副本的客户端确认消息 transacted - 有事务的持久化消息确认机制. 需开启对ActiveMQ的事务控制才可应用. --> 1 . 声明在队列中取消息 <jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto"> <!-- 注册消息监听器. 如果需要注册多个, 重复定义下述标签. --> (需要监听的目的地) <jms:listener destination="test-spring" ref="orderReciver" /> </jms:listener-container> <!-- 容器管理消息监听器实现类对象 --> <bean id="orderReciver" class="cn.gzsxt.jms.consumer.OrderReciever"/> <!-- 消息消费者 end --> </beans>
七 、 配置SpringMVC
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans <context:component-scan base-package="cn.gzsxt.controller" /> <mvc:annotation-driven /> </beans>
八 、 配置web.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans <context:component-scan base-package="cn.gzsxt.controller" /> <mvc:annotation-driven /> </beans>
九 、 jsp页面
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans <context:component-scan base-package="cn.gzsxt.controller" /> <mvc:annotation-driven /> </beans>
本文作者:___mouM
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
版权说明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.