关键词:
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq。
首先引入配置文件org.springframework.amqp,如下
<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.6.0.RELEASE</version> </dependency>
一:配置消费者和生成者公共部分
<rabbit:connection-factory id="connectionFactory" host="${rabbit.hosts}" port="${rabbit.port}" username="${rabbit.username}" password="${rabbit.password}" virtual-host="${rabbit.virtualHost}" channel-cache-size="50"/> <rabbit:admin connection-factory="connectionFactory"/> <!--定义消息队列--> <rabbit:queue name="spittle.alert.queue.1" durable="true" auto-delete="false"/> <rabbit:queue name="spittle.alert.queue.2" durable="true" auto-delete="false"/> <rabbit:queue name="spittle.alert.queue.3" durable="true" auto-delete="false"/> <!--绑定队列--> <rabbit:fanout-exchange id="spittle.fanout" name="spittle.fanout" durable="true"> <rabbit:bindings> <rabbit:binding queue="spittle.alert.queue.1"></rabbit:binding> <rabbit:binding queue="spittle.alert.queue.2"></rabbit:binding> <rabbit:binding queue="spittle.alert.queue.3"></rabbit:binding> </rabbit:bindings> </rabbit:fanout-exchange>
二:配置生成者
<import resource="amqp-share.xml"/> <!--创建消息队列模板--> <rabbit:template id="rabbitTemplate" connection-factory="connectionFactory" exchange="spittle.fanout" message-converter="jsonMessageConverter"> </rabbit:template> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.JsonMessageConverter"></bean>
三:生产者程序
public class Spittle implements Serializable { private Long id; private Spitter spitter; private String message; private Date postedTime; public Spittle(Long id, Spitter spitter, String message, Date postedTime) { this.id = id; this.spitter = spitter; this.message = message; this.postedTime = postedTime; } public Long getId() { return this.id; } public String getMessage() { return this.message; } public Date getPostedTime() { return this.postedTime; } public Spitter getSpitter() { return this.spitter; } }
public class ProducerMain { public static void main(String[] args) throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext("amqp/amqp-producer.xml"); AmqpTemplate template = (AmqpTemplate) context.getBean("rabbitTemplate"); for (int i = 0; i < 20; i++) { System.out.println("Sending message #" + i); Spittle spittle = new Spittle((long) i, null, "Hello world (" + i + ")", new Date()); template.convertAndSend(spittle); Thread.sleep(5000); } System.out.println("Done!"); } }
其中convertAndSend方法默认第一个参数是交换机名称,第二个参数是路由名称,第三个才是我们发送的数据,现在我们启动程序,效果如下
第四个:消费者程序
首先编写一个用于监听生产者发送信息的代码
/** * Created by Administrator on 2016/11/18. */ public class SpittleAlertHandler implements MessageListener { @Override public void onMessage(Message message) { try { String body=new String(message.getBody(),"UTF-8"); System.out.println(body); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } }
一定要注意实现MessageListener,我们只需要获取message的body即可,通过json来转换我们需要的程序(比如我们可以发送一个map,map存放方法和实体,这样我们可以通过反射来调用不同的程序来运行)。
下面我们配置消费者
<import resource="amqp-share.xml"/> <rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener ref="spittleListener" method="onMessage" queues="spittle.alert.queue.1,spittle.alert.queue.3,spittle.alert.queue.2"/> </rabbit:listener-container> <bean id="spittleListener" class="com.lp.summary.rabbitmq.impl.SpittleAlertHandler"/>
其中spittleListener是监听的程序,method是执行的方法,queues是我们监听的队列,多个队列可以逗号隔开(因为我们采用的是分发,所以三个队列获取的消息是相同的,这里为了简便我放在一个监听程序中了,其实我们可以写三个消费者,每个消费者监听一个队列)
现在只需要启动程序即可运行
public class ConsumerMain { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("amqp/amqp-consumer.xml"); } }
当然direct跟上面的情况差不多,只不过这个是根据路由匹配,先把数据发送到交换机,然后绑定路由和队列,通过交换机id和路由来找到队列,下面是一些主要的配置
<rabbit:queue id="spring-test-queue1" durable="true" auto-delete="false" exclusive="false" name="spring-test-queue1"></rabbit:queue> <rabbit:queue name="spring-test-queue2" durable="true" auto-delete="false" exclusive="false"></rabbit:queue> <!--交换机定义--> <!--rabbit:direct-exchange:定义exchange模式为direct, 意思就是消息与一个特定的路由键完全匹配,才会转发。 rabbit:binding:设置消息queue匹配的key--> <rabbit:direct-exchange name="${rabbit.exchange.direct}" durable="true" auto-delete="false" id="${rabbit.exchange.direct}"> <rabbit:bindings> <rabbit:binding queue="spring-test-queue1" key="spring.test.queueKey1"/> <rabbit:binding queue="spring-test-queue2" key="spring.test.queueKey2"/> </rabbit:bindings> </rabbit:direct-exchange> <!--spring template声明--> <rabbit:template exchange="${rabbit.exchange.direct}" id="rabbitTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter"></rabbit:template> <!--消息对象转成成json--> <bean id="jsonMessageConverter" class="org.springframework.amqp.support.converter.JsonMessageConverter"></bean>
下面是消费者监听配置
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto"> <rabbit:listener queues="spring-test-queue1" method="onMessage" ref="queueListenter"></rabbit:listener> </rabbit:listener-container> <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto"> <rabbit:listener queues="spring-test-queue2" method="onMessage" ref="queueListenter"></rabbit:listener> </rabbit:listener-container>
下面是程序
public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext-rabbitmq-producer.xml"); MQProducer mqProducer=(MQProducer) context.getBean("mqProducer"); mqProducer.sendDateToQueue("spring.test.queueKey1","Hello World spring.test.queueKey1"); mqProducer.sendDateToQueue("spring.test.queueKey2","Hello World spring.test.queueKey2"); }
实际情况可能需要我们去分离消费者和生成者的程序。当然spring还有负载均衡的配置,这里就不多介绍了。
rabbitmq简介(代码片段)
安装RabbitMQRabbitMQ是用Erlang开发的,所以需要先安装Erlang环境,在这里下载对应系统的Erlang安装包进行安装点击这里下载对应平台的RabbitMQ安装包进行安装编写生产者和消费者Spring对RabbitMQ已经进行了封装,正常使用中,会使用Spri... 查看详情
springboot自学教程|第四篇:springboot整合mybatis
引入依赖 1:在pom文件引入mybatis-spring-boot-starter的依赖:1<dependency>2<groupId>org.mybatis.spring.boot</groupId>3<artifactId>mybatis-spring-boot-starter<artifactId>4<version& 查看详情
rabbitmq第五篇:spring集成rabbitmq
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq。 首先引入配置文件org.springframework.amqp,如下<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring 查看详情
spring集成rabbitmq
mq.propertiesmq.host=主机ipmq.username=adminmq.password=admin123mq.port=5672mq.queue.vip=test-queuemq.exchange=test-exchangemq.vhost=testspring-rabbitmq.xml<?xmlversion="1.0"encoding="UTF-8"?>< 查看详情
接口测试(java+testng+ant+jenkins)第四篇jenkins
1、jenkins是什么? 是基于Java开发的一种持续集成工具,用于监控持续重复的工作。2、下载安装 http://www.cnblogs.com/zh-96/p/6445118.html3、新建任务 4、任务配置增加构建步骤lnvokeAnt内容: 保存 5、运行 项目... 查看详情
Spring 集成 pubsub 与 Spring amqp RabbitMQ pubsub
】Spring集成pubsub与SpringamqpRabbitMQpubsub【英文标题】:SpringintegrationpubsubvsSpringamqpRabbitMQpubsub【发布时间】:2015-12-2402:24:51【问题描述】:我正在开发一个MicroBlogspringmvchibernate应用程序。我需要实现像twitter这样的发布订阅功能。我... 查看详情
rabbitmq之与spring集成
Maven配置<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.6.0</version></dependency><dependency><groupId 查看详情
rabbitmq安装和使用(和spring集成)
一、安装RabbitMQ RabbitMQ是建立在强大的ErlangOTP平台上,因此安装RabbitMQ的前提是安装Erlang。通过下面两个连接下载安装3.2.3版本:下载并安装 EralngOTPForWindows (vR16B03)运行安装 RabbitMQServerWindowsInstaller (v3.2.3)具... 查看详情
第四篇:模块与包
第四篇:模块与包 PYTHON-模块定义搜索路径PYTHON-包相对导入&绝对导入 查看详情
rabbitmq及spring集成
...转载自https://blog.csdn.net/whoamiyang/article/details/549547801.背景RabbitMQ是一个由erlang开发的AMQP(AdvanvedMessageQueue)的开源实现。2.应用场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并... 查看详情
消息中间件系列四:rabbitmq与spring集成
一、RabbitMQ与Spring集成 准备工作:分别新建名为RabbitMQSpringProducer和RabbitMQSpringConsumer的mavenweb工程 在pom.xml文件里面引入如下依赖:<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/20 查看详情
开始写游戏---第四篇
开始写游戏---第四篇 今天完成了商店的物品展示功能。 写了一个物品展示面板组件: 这是代码: 使用的时候这么使用: 额。。。感觉使用有点麻烦,我又提供了... 查看详情
java后端开发第四篇:springboot中thymeleaf入门(代码片段)
thymeleaf是springboot中所支持的一种模板引擎。入门级使用如下:pom.xml中引入依赖:<!--引入模板引擎--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thy 查看详情
第四篇css
在标签上设置style属性:background-color:#2459a2;height:48px;。。。编写CSS样式:1.在标签的属性中编写1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6</head 查看详情
第四篇javascript
一、正则表达式提示:此专题需要多轮复习反复的加深和理解正则表达式的两种用法:1)regexp.xxx(string);2)string.yyy(regexp);验证用户输入的手机号格式是否合法varregexp=/^1[3-8]d{9}$/;varinput="15012345678";console.log(regexp.test(input))正则表达式... 查看详情
小白入门深度学习|第四篇:配置pytorch环境
第四篇其他软件的安装方法
这篇是预留的一篇文章,主要用来记录其他软件的安装方法。占个位置。 查看详情
第四篇alexnet——网络实战
文章目录摘要1项目结构2划分训练集和测试集3计算mean和Standard3.1标准化的作用3.2归一化的作用4训练4.1导入项目使用的库4.2设置随机因子 查看详情