MQ学习(四)--- 与spring整合(点对点模式)
来源:互联网 发布:全国省市区sqlserver 编辑:程序博客网 时间:2024/06/06 03:15
我是用的maven下的jar包,你也可以自己找spring+mq的全套jar包:
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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>lishaoranMQ</groupId>
<artifactId>springMQ</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.11.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
</dependencies>
</project>
咱们先整没有监听器的简单的mq:
Spring整合activemq的配置文件:
<?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/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--配置JMS连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--ActiveMQ服务的地址和端口-->
<property name = "brokerURL" value="tcp://127.0.0.1:61616" />
</bean>
<!--定义消息队列(queue点对点模式)-->
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg >
<value>test.queue</value>
</constructor-arg>
</bean>
<!--配置JMS模板(Queue),Spring提供的JMS工具类,用它发送、接受消息-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name = "connectionFactory" ref="connectionFactory" />
<property name = "destination" ref="queue" />
</bean>
</beans>
消息发送者:
package cn.lishaoran.queue;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*消息发送者(queue模式)
* @author ALWZ
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class QueueSender{
@Resource
private JmsTemplate jmsTemplate;
@Test
public void send(){
sendMqMessage(null,"测试点对点模式的发送消息内容+李少然你好!");
}
public void sendMqMessage(Destination destination,final String message){
if (null==destination) {
destination=jmsTemplate.getDefaultDestination();
}
jmsTemplate.send(destination,new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
System.out.println("spring+mq采用点对点 发送了消息!");
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
}
消息接收者
package cn.lishaoran.queue;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*消息接收者
* @author ALWZ
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class QueueReceiver {
@Resource
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
@Test
public void receiveMqMessage(){
Destination destination=jmsTemplate.getDefaultDestination();
receive(destination);
}
//接收消息
public void receive(Destination destination){
TextMessage tm =(TextMessage)jmsTemplate.receive(destination);
try {
System.out.println("从队列"+destination.toString()+"收到了消息:\t"+tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
先运行消息发送者,再运行消息接收者,然后就可以看到:
发送消息:
接受消息:
不加入监听器的情况是消息接收者伸手和消息发送者要,但是消息接收者不知道什么时候消息发送者发送消息,所以咱们就需要写一个监听器,让监听器监听发送端的情况,一旦发现发送者发送了消息,就通知接收者接收。
监听模式的queue:
配置文件如下:
<?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/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!--配置JMS模板(Queue),Spring提供的JMS工具类,用它发送、接受消息-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name = "connectionFactory" ref="connectionFactory" />
</bean>
<!--配置JMS连接工厂-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!--ActiveMQ服务的地址和端口-->
<property name = "brokerURL" value="tcp://127.0.0.1:61616" />
</bean>
<!--定义消息队列(queue点对点模式)发送地址-->
<bean id="queue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg >
<value>testSpringQueue</value>
</constructor-arg>
</bean>
<!--配置消息队列监听者(queue)-->
<bean id="listener" class="cn.lishaoran.Listener"></bean>
<!--监听器容器-->
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name = "connectionFactory" ref="connectionFactory" />
<property name = "destination" ref="queue" />
<property name = "messageListener" ref="listener" />
<property name = "receiveTimeout" value="10000" />
</bean>
</beans>
发送者:
package cn.lishaoran.queue;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*消息发送者(queue模式)
* @author ALWZ
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class QueueSender{
@Resource
private JmsTemplate jmsTemplate;
//从配置文件获取发送地址
@Resource
@Qualifier("queue")
private Destination destination;
@Test
public void send(){
sendMqMessage(destination,"测试点对点模式的发送消息内容+李少然你好!");
}
public void sendMqMessage(Destination destination,final String message){
if (null==destination) {
destination=jmsTemplate.getDefaultDestination();
}
jmsTemplate.send(destination,new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
System.out.println("spring+mq采用点对点 发送了消息!");
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
}
接收代码:
package cn.lishaoran.queue;
import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
*消息接收者
* @author ALWZ
*
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class QueueReceiver {
@Resource
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
//从配置文件获取接收消息地址
@Resource
@Qualifier("queue")
private Destination destination;
@Test
public void receiveMqMessage(){
receive(destination);
}
//接收消息
public void receive(Destination destination){
TextMessage tm =(TextMessage)jmsTemplate.receive(destination);
try {
System.out.println("从队列"+destination.toString()+"收到了消息:\t"+tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
监听器:
package cn.lishaoran;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
public class Listener implements MessageListener{
public void onMessage(Message message) {
TextMessage tm =(TextMessage) message;
try {
System.out.println("Listener收到了文本消息:\t"+tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
由于有了监听器的存在,所以只用启动消息发送端就可以了:
启动之后,过一段时间,监听器监听到了,就自动调用消费端消费这些信息。
一段时间后:、
同时程序也就终止了。
- MQ学习(四)--- 与spring整合(点对点模式)
- MQ学习(二)--- 点对点模式
- Spring整合activeMq(一):点对点模式
- MQ学习(五)--- 与spring整合(topic)
- MQ与Spring的整合
- activemq学习笔记——spring整合(Point-To-Point点对点类型)
- Spring学习笔记(四)----SSH整合
- Spring读书笔记(四)与Struts整合
- Spring读书笔记(四)与Struts整合
- (四)Ibatis之与Spring整合
- spring监听与IBM MQ JMS整合
- spring监听与IBM MQ JMS整合
- active mq与Spring的整合
- spring整合activemq消息队列之点对点模式
- (四)mybatis学习之原始Dao开发方式及与spring整合
- Mybatis框架学习(四)—查询缓存与spring的整合开发
- Spring 整合 ibm mq
- Spring整合mq
- 数据库SQL优化大总结
- JTAG error:can not read register while CPU is running
- jquery $.each()循环退出
- $(document).ready(function(){……})的各种方法
- 路由器、交换机与网关
- MQ学习(四)--- 与spring整合(点对点模式)
- Thrift在Android上的客户端实现
- C++数组概述
- LeetCode 563. Binary Tree Tilt (C++)
- 系统学习 jQuery (二) 工具
- 引入pageHelper
- iOS 按比例显示图片 切割后显示中心图片(缩略图)
- 更改UITextField的placeholder文字颜色的5种方法
- Linux服务器简单设置minicom