上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息。通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bean注入到服务层类中,并使用它创建Connection,使用这个Connection来创建Channel,再使用这个Channel发布消息到Exchange中。

当然Spring AMQP提供了RabbitTemplate来简便我们的操作,消除RabbitMQ发送和接收消息相关的样板代码。使用RabbitTemplate也是先在配置文件中写相关的配置,使用Rabbit命名空间的<template>元素,如下:

<template id="rabbitTemplate" connection-factory="connectionFactory">

现在要发送消息只需要将模板bean注入到服务层类中(这里以SendServiceImpl为例),并使用它来发送Spittle,使用RabbitTemplate来发送Spittle提醒,代码如下:

public class SendServiceImpl implements SendService {
private RabbitTemplate rabbit; @Autowired
public SendServiceImpl (RabbitTemplate rabbit) {
this.rabbit = rabbit;
} public void sendSpittle (Spittle spittle) {
rabbit.convertAndSend("spittle.test.exchange", "spittle.test", spittle);
}
}

上面代码中sendSpittle()调用RabbitTemplate的convertAndSend()方法,传入的三个参数分别是Exchange的名称、routing key以及要发送的对象。
这里如果使用最简单的只传要发送的对象的重载方法,RabbitTemplate就使用默认的Exchange和routing key。按之前配置的话,这两项默认都为空,也可以自行在<template>元素上借助exchange和routing-key属性配置不同的默认值:

<template id="rabbitTemplate" connection-factory="connectionFactory"
exchange="spittle.test.exchange"
routing-key="spittle.test" />

此外RabbitTemplate还有其他方法可以用来发送消息,比如用send()方法来发送org.springframework.amqp.core.Message对象,如下所示:

Message message = new Message("Hello World".getBytes(), new MessageProperties());
rabbit.send("hello.exchange", "hello.routing", message);

使用send()方法的技巧在于构造要发送的Message对象,在上面的例子中,通过给定字符串的字节数组来构建Message实例。这里是字符串相对比较简单,如果消息是复杂对象的话,则会比较复杂。也是因为这样,所以一般会用convertAndSend()方法,它会自动将对象转换为Message,不过它需要一个消息转换器来帮助完成该任务,默认的转换器是SimpleMessageConverter,它适用于String、Serializable实例和字节数组。

【Spring】使用Spring和AMQP发送接收消息(中)的更多相关文章

  1. 【Spring】使用Spring和AMQP发送接收消息(上)

    讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽 ...

  2. 【Spring】使用Spring和AMQP发送接收消息(下)

    上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息.在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式.Spring AMQP也提供 ...

  3. XMPP客户端开发(2)--发送接收消息

    客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat ch ...

  4. 十一、模拟扫码登录微信(用Django简单的布置了下页面)发送接收消息

    为了能够模拟登陆QQ,并获取信息.对扫码登录微信进行了分析.简单的用了一下Django将获取的信息映射到页面上.(python3+pycharm) 主要过程就是: 1.获取二维码 2.扫码登录(有三种 ...

  5. 安装RabbitMq,写程序发送接收消息

    1.安装Erlang和RabbitMq 在安装RabbitMq之前需要安装的Erlang(esl-erlang_22.0_windows_amd64.exe): https://pan.baidu.c ...

  6. GCM 发送接收消息 Message Client Server 服务器端,客户端

    GCM 传递参数 最近用了很多时间做GCM,由于碰到很多问题,因此详细做一下记录,以方便各位网友,不用再走我的重复的路.不过我试了一下GCM在国内很不好用.假如开发国外的程序的话,用GCM倒是很不错的 ...

  7. python通过套接字来发送接收消息

    案例如下: 1.启动一个服务端套接字服务 2.启动一个客户端套接字服务 3.客户端向服务端发送一个hello,服务端则回复一个word,并打印 参考地址:https://www.cnblogs.com ...

  8. kafka控制测试发送接收消息

    kafaka,生产者:./kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic 消费者:./kafka-co ...

  9. rabbitmq template发送的消息中,Date类型字段比当前时间晚了8小时

    前言 前一阵开发过程遇到的问题,用的rabbitmq template发送消息,消息body里的时间是比当前时间少了8小时的,这种一看就是时区问题了. 就说说为什么出现吧. 之前的配置是这样的: @B ...

随机推荐

  1. IOS隐藏navigationItem左右按钮的方法

    在移除一个View的时候或者根据需要希望让navigationItem的rightBarButtonItem或者leftBarButtonItem处于隐藏状态,一个简单的方法如下:   self.na ...

  2. linux命令行模式下对FTP服务器进行文件上传下载

    参考源:点击这里查看   1. 连接ftp服务器 格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码 ...

  3. ArcGIS快速制图插件介绍

    ArcGIS快速制图插件介绍 By 李远祥 作品背景 <快速制图插件增强版>在原有的<快速制图插件>基础上,加入植被乱序填充.生成立体楼快.等高线增强显示.一键导出地图和数据. ...

  4. iOS8中 UITableView section 分区头部视图不显示

    最近自己使用了UITableView写了一个通讯录,但是在编写过程还算顺利,但是后来测试的时候,发现在iOS8中TableView的分区头不能正常显示,使用 - (NSString *)tableVi ...

  5. webapi 发布接口报405错误(angularjs2.0)

    参考链接:http://www.cnblogs.com/shenbin/p/5680976.html web访问接口报405错误,以前的jQuery访问方式访问接口没有问题. 但是换成angularj ...

  6. NodeJs下的测试框架Mocha

    介绍和代码下载 Mocha在2011年发布,是目前最为流行的javascript框架之一,在本文我们重点介绍它在NodeJs上的使用. 如果你需要下载实例代码,可以通过这个链接 gitClone 或者 ...

  7. 【PHP系列】PHP推荐标准之PSR-4,自动加载器策略

    接上回的继续说,上回说到PSR-3日志记录器接口,这回我们来说说PSR的最后一个标准,PSR-4,自动加载器策略. 缘由 自动加载器策略是指,在运行时按需查找PHP类.接口或性状,并将其载入PHP解释 ...

  8. 【转】对于HttpClient和HtmlUnit的理解

    原文地址:http://www.haohaoblog.com/?p=1327&utm_source=tuicool 做Java编程的人其实,很多不懂SEO,也不知道如何让百度收录等等,当然,对 ...

  9. 每天一个Linux命令(16)--which命令

    把昨天的,留给昨天:今日,你将重新开始. 好的,在第一个阶段我们学习了  文件目录的操作命令: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ls cd pwd mkdir ...

  10. dubbo源码分析(一)

    *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...