spring集成rabbitMq(非springboot)
首先 , pom文件需要加入spring集成rabbitMq的依赖:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.6..RELEASE</version>
</dependency>
发送端spring的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:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"> <!-- rabbitMQ配置 -->
<bean id="rabbitConnectionFactory"
class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="192.168.1.11"/>
<property name="username" value="root"/>
<property name="password" value="lee13233"/>
<property name="channelCacheSize" value=""/>
<property name="port" value=""></property>
</bean>
<rabbit:admin connection-factory="rabbitConnectionFactory"/> <!-- autoDelete:是否自动删除 durable:持久化 -->
<rabbit:queue name="test123queue" durable="true"/>
<rabbit:queue name="test321queue" durable="true"/> <!-- topic主题 -->
<rabbit:topic-exchange name="leo.pay.topic.exchange" xmlns="http://www.springframework.org/schema/rabbit" durable="true">
<bindings>
<binding queue="test123queue" pattern="*.*.test123" />
<binding queue="test321queue" pattern="test321.#" />
</bindings>
</rabbit:topic-exchange> <!-- 创建rabbitTemplate 消息模板类 -->
<bean id="rabbitTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<constructor-arg ref="rabbitConnectionFactory"></constructor-arg>
</bean> </beans>
发送端的java代码:
@Test
public void testRabbitMq() throws Exception {
RabbitTemplate rabbitTemplate = (RabbitTemplate) LeoContext.getContext().getApplication().getBean("rabbitTemplate");
//第二个参数为路由key(routingKey)的值,当路由可以为test321.hello.test123时,两个消费队列都可以收到消息,当值为test321.hello.aaa时,只有绑定了test321.#的队列才可以收到消息,当值为ta1.hello.test123,只有绑定了*.*.test123的队列才可收到消息
for(int i = ; i <= ; i++) {
String str = "hello" + i;
rabbitTemplate.send("leo.pay.topic.exchange", "test321.hello.test123", new Message(str.getBytes(), new MessageProperties()));
}
}
接收端(我配置的接收端与发送端不在同一个项目)spring的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:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd
http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"
default-autowire="byName"> <!-- rabbitMQ配置 -->
<bean id="rabbitConnectionFactory"
class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="192.168.1.11"/>
<property name="username" value="leo"/>
<property name="password" value="lee31211"/>
<property name="channelCacheSize" value=""/>
<property name="port" value=""></property>
</bean>
<rabbit:admin connection-factory="rabbitConnectionFactory"/> <rabbit:queue name="test123queue" durable="true" />
<rabbit:queue name="test321queue" durable="true" /> <!-- 该处是指将路由leo.pay.topic.exchange与两个队列绑定在一块,也可以在rabbitMq的控制台上手动绑定,手动绑定之后,该处代码可以省略,其实发送端已经绑定过了,也没必要绑定了,所以该代码可以省略 -->
<!-- <rabbit:topic-exchange name="leo.pay.topic.exchange" xmlns="http://www.springframework.org/schema/rabbit" durable="true"> -->
<!-- <bindings> -->
<!-- <binding queue="test123queue" pattern="test123.*" /> -->
<!-- <binding queue="test321queue" pattern="test321.*" /> -->
<!-- </bindings> -->
<!-- </rabbit:topic-exchange> --> <!-- 启动两个队列对应的监听(消费者) -->
<bean id="detailQueueConsumer" class="com.leo.website.cousumer.DetailQueueConsumer"></bean>
<bean id="testQueueConsumer" class="com.leo.website.cousumer.TestQueueConsumer"></bean> <!-- 将两个队列加入监听容器中,每个队列的监听都对应一个监听器 -->
<rabbit:listener-container connection-factory="rabbitConnectionFactory" concurrency= "">
<rabbit:listener queues="test123queue" ref="detailQueueConsumer" method="onMessage"/>
<rabbit:listener queues="test321queue" ref="testQueueConsumer" method="onMessage"/>
</rabbit:listener-container> </beans>
接收端java代码(只列出一个监听,另外一个类似):
public class DetailQueueConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
System.out.println("DetailQueueConsumer: " + new String(message.getBody()));
}
}
转载至 :http://blog.csdn.net/u012204058/article/details/54292888
基于这个基础,我们需要做一定的修改,当接收端关闭时,rabbitMq中待发送消息无法到达,当接收端启动,listener会在启动过程中便已接收到消息进行业务处理,这样存在风险,我们可以做以下改动进行优化
public class MessageReceiver implements MessageListener{
private boolean startFlag = true;
@Override
public synchronized void onMessage(Message msg) {
try{
//刚启动系统时,延迟30秒后执行
if(startFlag){
Thread.sleep(30000);
startFlag = false;
}
System.out.println("topic.serviceMessageClientTempQueue : " + new String(msg.getBody(), "UTF-8"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
spring集成rabbitMq(非springboot)的更多相关文章
- rabbitMQ第五篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- RabbitMQ第四篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- spring集成RabbitMQ配置文件详解(生产者和消费者)
1,首先引入配置文件org.springframework.amqp,如下: <dependency> <groupId>org.springframework.amqp< ...
- Spring 集成 RabbitMQ
pom.xml <dependency> <groupId>org.springframework.amqp</groupId> <artifactId> ...
- spring集成rabbitmq
https://www.cnblogs.com/nizuimeiabc1/p/9608763.html
- Spring集成RabbitMQ-使用RabbitMQ更方便
如果提到Spring,你脑海中对他的印象还停留在SSH三大框架之一,那或许你该好好重新认识这个家伙. 在IT技术日新月异的今天,他还能让你忘不了并与他朝夕相处,他,肯定有自己的绝活.如今他早已经不是孤 ...
- Spring Boot实战三:集成RabbitMQ,实现消息确认
Spring Boot集成RabbitMQ相比于Spring集成RabbitMQ简单很多,有兴趣了解Spring集成RabbitMQ的同学可以看我之前的<RabbitMQ学习笔记>系列的博 ...
- Spring集成RabbiMQ-Spring AMQP新特性
上一篇<Spring集成RabbitMQ-使用RabbitMQ更方便>中,我们只需要添加响应jar的依赖,就可以写一个Spring集成RabbitMQ下非常简单收发消息的程序. 我们使用的 ...
- Spring 集成rabbiatmq
pom 文件 <dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artif ...
随机推荐
- vsftpd.service: Main process exited, code=exited, status=2/INVALIDARGUMENT和vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法
今天在配置VSFTPD过程中遇到两个错误 1是启动失败,通过 SERVICE VSFTPD STATUS 查看到报错 May 02 16:06:58 debian systemd[1]: Starti ...
- bzoj 1001 原图最小割转化为对偶图最短路
题目大意: 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形 ...
- SPOJ1693 COCONUTS - Coconuts
传送门[洛谷] 自闭QAQ 什么玩意QAQ 不是很理解到底在干啥 问了巨佬以后大概是这个样子的 可以看出是最小割模型 对于每一个人 反悔的话就是代价+1 那么连接(s,i) (i,t)分别表示他最后选 ...
- Java中File类重修
IO流 概述 io流:输入输出流(input/output).流是一组有顺序的,有起点和终点的字节集合,是对各种数据传输的总称或抽象.即数据在两设备之间的传输称为流.流的本质是数据传输. InputS ...
- HAProxy基于Centos6.5安装及配置
一.使用2.6内核Linux,配置sysctl参数 vi /etc/sysctl.conf #haproxy confignet.ipv4.tcp_tw_reuse = 1net.ipv4.ip_lo ...
- 欢迎页jsp
<!-- 拦截设置 --><servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> ...
- 【UNR #2】黎明前的巧克力 解题报告
[UNR #2]黎明前的巧克力 首先可以发现,等价于求 xor 和为 \(0\) 的集合个数,每个集合的划分方案数为 \(2^{|S|}\) ,其中 \(|S|\) 为集合的大小 然后可以得到一个朴素 ...
- SQL学习记录:定义(一)
--1.在这里@temp是一个表变量,只有一个批处理中有效,declare @temp table; --2. 如果前面加#就是临时表,可以在tempDB中查看到,它会在最后一个使用它的用户退出后才失 ...
- hbase 1.4 部署
centos 7 部署 hbase 1.4.11 版本 在部署 hbase 前,首先安装好 jdk 1.7 和 zookeeper 3.4.14 软件. 部署 zookeeper 软件,可以参考 zk ...
- 102.kaldi 斯坦福语音识别工具的编译
接着上一节,在编译完了openFST有限状态机之后,便开始了最重要部分,语音识别插件的编译过程 首先看目录是如下所示的 1.首先添加openBLAS的支持,这是一个矩阵运算库,个人觉得这个矩阵运算库 ...