RabbitMQ学习以及与Spring的集成(三)
本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。
在RabbitMQ的Spring配置文件中,首先需要增加命名空间。
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
其次是模式文档,这里按1.0的来。
xsi:schemaLocation="
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"
配置connection-factory元素。
<rabbit:connection-factory id="connectionFactory"
username="mmq" password="mmq" host="192.168.1.138" port="5672" virtual-host="/vhost1" />
配置connection-factory元素实际是注册一个org.springframework.amqp.rabbit.connection.CachingConnectionFactory实例。
参数介绍:
id:bean的id值。
host:RabbitMQ服务器地址。默认值"localhost"。
port:RabbitMQ服务端口,默认值"5672"。
virtual-host:虚拟主机,默认是"/"。
username和password就是访问RabbitMQ服务的账户和密码了。
channel-cache-size:channel的缓存数量。新版本默认是25。
消息队列queue的配置。
<!--定义queue queueTest -->
<rabbit:queue name="queueTest" durable="true" auto-delete="false" exclusive="false" />
参数介绍:
name:queue的名字。
durable:是否为持久的。默认是true,RabbitMQ重启后queue依然存在。
auto-delete:表示消息队列没有在使用时将被自动删除。默认是false。
exclusive:表示该消息队列是否只在当前connection生效。默认false。
交换器exchange的配置。
<rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false">
<rabbit:bindings>
<rabbit:binding queue="queueTest" key="queueTestKey"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>
参数介绍:
name:exchange的名字。
durable:是否为持久的,默认为true,RabbitMQ重启后exhange依然存在。
auto-delete:表示exchange在未被使用时是否自动删除,默认是false。
key:queue在该direct-exchange中的key值。当消息发送给该direct-exchange中指定key为设置值时,消息将会转发给queue参数指定的消息队列。
Spring为方便使用RabbitMQ服务,提供一个操作模板类:org.springframework.amqp.rabbit.core.RabbitTemplate。
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="exchangeTest" />
配置也很简单。template还有其他的配置项,可以自己查看xsd文件中的说明。
最后一个配置项是消息consumer。其实也可以叫做listener。简单的配置如下。
<rabbit:listener-container connection-factory="connectionFactory">
<rabbit:listener queues="queueTest" ref="messageConsumer"/>
</rabbit:listener-container>
messageConsumer是一个简单bean类,可以用注解标识。
@Component("messageConsumer")
public class MessageConsumer implements MessageListener {
public void onMessage(Message message) {}
}
类作为消息监听器,必须实现接口MessageListener或者是接口ChannelAwareMessageListener。
另一种配置方式是使用method参数,指定消息处理的方法,以org.springframework.amqp.core.Message类作为方法参数。
配置完成并写好消息监听处理类后就可以尝试发送消息了。
public class MessageProducer{
@Resource
private AmqpTemplate amqpTemplate;
public void sendMessage(){
Message message = MessageBuilder.withBody("hello rabbit".getBytes("utf-8"))
.setMessageId(System.currentTimeMillis()+"")
.build();
this.amqpTemplate.send("queueTestKey", message);
}
}
消息监听方法。
public void onMessage(Message message){
String content = new String(message.getBody(),"utf-8");
system.out.println(content);
}
消息内容发送时会被转换为字节数组,默认以UTF-8进行编码。如果想要发送对象信息,按照类实例的序列化和反序列化进行操作即可。
RabbitMQ学习以及与Spring的集成(三)的更多相关文章
- RabbitMQ学习以及与Spring的集成(二)
本文介绍RabbitMQ的一些基本概念. RabbitMQ服务可以安装在独立服务器上,通过配置的账户和ip访问使用.也就是说,RabbitMQ和使用它的应用可以部署在不同的服务器上.RabbitMQ的 ...
- RabbitMQ学习以及与Spring的集成(一)
本文记录RabbitMQ服务的搭建过程. 想要使用RabbitMQ消息中间件服务.首先要安装RabbitMQ,可以在:https://www.rabbitmq.com/download.html根据安 ...
- Spring boot 集成三种定时任务方式
三种定时任务方式分别为 org.springframework.scheduling.annotation.Scheduled java.util.concurrent.ScheduledExecut ...
- Spring boot 集成三种拦截方式
三种拦截方式分别为: javax.servlet.Filter org.springframework.web.servlet.HandlerInterceptor org.aspectj.lang. ...
- Spring Boot实战三:集成RabbitMQ,实现消息确认
Spring Boot集成RabbitMQ相比于Spring集成RabbitMQ简单很多,有兴趣了解Spring集成RabbitMQ的同学可以看我之前的<RabbitMQ学习笔记>系列的博 ...
- RabbitMQ学习系列(三): C# 如何使用 RabbitMQ
上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...
- RabbitMQ学习总结 第三篇:工作队列Work Queue
目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...
- spring boot / cloud (三) 集成springfox-swagger2构建在线API文档
spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...
- Spring Boot (三)模板引擎FreeMarker集成
一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...
随机推荐
- Python解析xml与JSON
xml与json是常用的文件交换格式,常用来表示网页的html则是xml的变种.解析xml和json在web开发中有着重要应用. DOM解析XML 文件对象模型(Document Object Mod ...
- 详解REST架构风格
编辑推荐: 本文来自于segmentfault.com,一起了解REST的内在,认识REST的优势,而不再将它当作是“理所当然” 引言 作为Web开发者,你可能或多或少了解一些REST的知识,甚至已经 ...
- Java Bad version
Eclipse的三个地方需要重新设置: 在工程上点右键,选属性,三个地方: Java Build Path Java Compiler Project Facets:这个地方还可以设置tomcat的r ...
- 【转】Visio绘制WEB流程图的心得
一个哥们在MSN上告诉我,他们公司的交互设计师只产出流程图,并问我用什么标准评价流程图的好坏.他的说法把我彻底震了-这分工也太细了吧!也不知道该说他们那里这样是好还是不好. 不过仔细想来,我倒的确没有 ...
- Shell脚本编写3---Shell 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 执行脚本,查看输出结果: 另外 ...
- Magento2开发教程 - 如何向数据库添加新表
Magento 2具有特殊的机制,允许你创建数据库表,修改现有的,甚至添加一些数据到他们(如安装数据,已被添加在模块安装). 这种机制允许这些变化可以在不同的设备之间传输. 关键的概念是,而不是做你能 ...
- 在懒加载的Ionic工程中使用 ionic2-auto-complete 组件:Can't bind to 'dataProvider' since it isn't a known property of 'ion-auto-complete'
问题描述: 在基于懒加载的Ionic工程中,使用ionic2-auto-complete组件(GitHub地址:https://github.com/kadoshms/ionic2-autocompl ...
- Spring Security 源码解析(一)
上篇 Spring Security基本配置已讲述了Spring Security最简单的配置,本篇将开始分析其基本原理 在上篇中可以看到,在访问 http://localhost:18081/use ...
- 泛型通配符extends与super的区别
<? extends T>限定参数类型的上界:参数类型必须是T或T的子类型 <? super T> 限定参数类型的下界:参数类型必须是T或T的超类型 总结为: <? ex ...
- Oracle数据库进行撤销
第一步:在v$sqlarea 这视图里面找到你操作那条SQL的时间;select r.FIRST_LOAD_TIME,r. from v$sqlarea r order by r.FIRST_LOAD ...