本文介绍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:虚拟主机,默认是"/"。

usernamepassword就是访问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的集成(三)的更多相关文章

  1. RabbitMQ学习以及与Spring的集成(二)

    本文介绍RabbitMQ的一些基本概念. RabbitMQ服务可以安装在独立服务器上,通过配置的账户和ip访问使用.也就是说,RabbitMQ和使用它的应用可以部署在不同的服务器上.RabbitMQ的 ...

  2. RabbitMQ学习以及与Spring的集成(一)

    本文记录RabbitMQ服务的搭建过程. 想要使用RabbitMQ消息中间件服务.首先要安装RabbitMQ,可以在:https://www.rabbitmq.com/download.html根据安 ...

  3. Spring boot 集成三种定时任务方式

    三种定时任务方式分别为 org.springframework.scheduling.annotation.Scheduled java.util.concurrent.ScheduledExecut ...

  4. Spring boot 集成三种拦截方式

    三种拦截方式分别为: javax.servlet.Filter org.springframework.web.servlet.HandlerInterceptor org.aspectj.lang. ...

  5. Spring Boot实战三:集成RabbitMQ,实现消息确认

    Spring Boot集成RabbitMQ相比于Spring集成RabbitMQ简单很多,有兴趣了解Spring集成RabbitMQ的同学可以看我之前的<RabbitMQ学习笔记>系列的博 ...

  6. RabbitMQ学习系列(三): C# 如何使用 RabbitMQ

    上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...

  7. RabbitMQ学习总结 第三篇:工作队列Work Queue

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  8. spring boot / cloud (三) 集成springfox-swagger2构建在线API文档

    spring boot / cloud (三) 集成springfox-swagger2构建在线API文档 前言 不能同步更新API文档会有什么问题? 理想情况下,为所开发的服务编写接口文档,能提高与 ...

  9. Spring Boot (三)模板引擎FreeMarker集成

    一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...

随机推荐

  1. [BZOJ 2839]集合计数

    Description 题库链接 有 \(2^n\) 个集合,每个集合只包含 \([1,n]\) ,且这些集合两两不同.问有多少种选择方法(至少选一个),使得这些集合交集大小为 \(k\) . \(0 ...

  2. 自动化部署MySQL 5.6 步骤 制作到ftp共享,永远使用

    首先需要搭建ftpserver yum install vsftpd service vsftpd start 这样ftp服务就起来了,这里只是简单的使用,所以没有使用配置文件.这样我们只要将需要的文 ...

  3. mysql 表支持事务的方法

    1.在mysql客户管,如:Navicate.SQLyog在导航面板中选择要转换为InnoDB存储引擎类型的数据库,例如选择db_yunping数据库.如下图所示: 2. 在查询窗口中输入 show ...

  4. 关于伪分布zookeeper集群启动出错(Error contacting service. It is probably not running.)

    今天在配置zookeeper伪分布集群的时候,发现竟然出错了,以前我都是在多台电脑上搭建,大家可以参考我写的Hadoop HA搭建中的zookeeper如何搭建 现在就来说一下为何会出错. 出错的原因 ...

  5. java 获取控制台输入

    读取控制台输入 从控制台读取一行数据,返回值字符串 public class IO { public static void main(String args[]) throws IOExceptio ...

  6. springmvc 配置多个数据源,并动态切换

    前言:工作中经常会有两个数据源的情况,所以记录一下.这里测试两个数据源,给出流程和代码. 首先:配置两个数据源 <description>配置mybatis数据源</descript ...

  7. WCF中DataContract和MessageContract的区别

    一.代码案例 首选建立2个WCF Service,它们分别使用不同的Contract,同时创建一个Console控制台项目,作为Client: 其中,WcfServiceWithDataContrac ...

  8. 使用AJAX实现分页

    Fenye.html <!DOCTYPE html> <html> <head> <title>分页</title> </head&g ...

  9. grafana 安装- 曲线图展示每秒新增数据量

    下载: https://dl.grafana.com/oss/release/grafana-5.4.2.windows-amd64.zip 解压就能用 添加数据源 添加查询条件 sql 模式编写查询 ...

  10. WCF服务使用(IIS+Http)和(Winform宿主+Tcp)两种方式进行发布

    1.写在前面 刚接触WCF不久,有很多地方知其然不知其所以然.当我在[创建服务->发布服务->使用服务]这一过程出现过许多问题.如客户端找不到服务引用:客户端只在本机环境中才能访问服务,移 ...