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

使用RabbitTemplate来接收消息

RabbitTemplate提供的接收信息的方法中最简单的就是receive()方法,通过该方法就可以从队列中获取一个Message对象:

Message message = rabbit.receive("spittle.test.queue");

或者也可以通过配置获取消息的默认队列,这是通过在配置模板的时候,设置queue属性实现的:

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

这样的话,在调用receive()方法时,不需要设置任何参数就能从默认队列中获取消息:

Message message = rabbit.receive( );

获取到Message对象后,一般需要将它的body属性中的字节数组转换为想要的对象,就像在发送的时候将领域对象转换为Message一样,将接收到的Message转换为领域对象也很繁琐。这里可以考虑使用RabbitTemplate的receiveAndConvert()方法作为替代方案:

Spittle spittle = (Spittle) rabbit.receiveAndConvert("spittle.test.queue");

receiveAndConvert()方法会使用与sendAndConvert()方法相同的消息转换器,将Message对象转换为原始的类型。
调用receive()和receiveAndConvert()方法都会立即返回,如果队列中没有等待的消息,将会得到null。这时一般需要程序员自己管理轮询以及必要的线程,实现队列监控。如果不想每次都同步轮询等待消息到达,可以使用Spring AMQP提供的消息驱动pojo,下面就看看使用消息驱动pojo的方式来接收消息。

使用消息驱动pojo来接收消息

如果想要在消息驱动pojo中异步地消费使用Spittle对象,先要解决这个pojo本身,如下的SpittleTestHandler扮演了这个角色:

public class SpittleTestHandler {
public void handleSpittleTest (Spittle spittle) {
...
}
}

其实这个类并没有依赖于AMQP,不管通过什么机制传递过来Spittle对象,它都能够处理。
这里还需要在Spring应用上下文中将SpittleTestHandler声明为一个bean:

<bean id="spittleListener"
class="com.***.spittr.test.SpittleTestHandler">

最后要声明一个监听器容器和监听器,当消息到达的时候,能够调用SpittleTestHandler,配置如下:

<listener-container connection-factory="connectionFactory">
<listener ref="spittleListener"
method="handleSpittleTest"
queue-names="spittle.test.queue" />
</listener-container>

上面的<listener-container>与<listener>元素都来自rabbit命名空间。并通过queue-names属性来指定要监听的队列,这里只设定了一个要监听的队列,如果要设置多个队列的话,用逗号隔开。到这里消息接收就完成了,拿到消息后就可以在相应方法里执行相应处理了。

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

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

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

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

    上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bea ...

  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. spring 和spring cloud 组成

    spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在工作 ...

随机推荐

  1. 背水一战 Windows 10 (114) - 后台任务: 后台任务的 Demo(与 app 不同进程), 后台任务的 Demo(与 app 相同进程)

    [源码下载] 背水一战 Windows 10 (114) - 后台任务: 后台任务的 Demo(与 app 不同进程), 后台任务的 Demo(与 app 相同进程) 作者:webabcd 介绍背水一 ...

  2. Android逆向之静态分析

    想必打过CTF的小伙伴多多少少都触过Android逆向,所以斗哥将给大家整一期关于Android逆向的静态分析与动态分析.本期先带来Android逆向的静态分析,包括逆向工具使用.文件说明.例题解析等 ...

  3. Android 基本控件相关知识整理

    Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...

  4. python 77种常用的基础函数

     Python:   1. print()函数:打印字符串   2. raw_input()函数:从用户键盘捕获字符   3. len()函数:计算字符长度   4. format(12.3654,’ ...

  5. Python多线程使用和注意事项

    多线程   基本实现: 第一种,函数方式 # -*- coding:utf-8 -*- import thread import time     def print_time(threadName, ...

  6. [Swift]枚举类型:UIBarButtonItem的24种样式

    UIBarButtonSystemItemFlexibleSpace 可变空白, 在调用的过程中,使用  UIBarButtonSystemItemFlexibleSpace去占位,达到实现规范化的目 ...

  7. hbase概念解析

    hbase是一种nosql数据库.是一个高可靠,高性能,面向列,可伸缩,实时读取的分布式数据库. hbase一般由行键,时间戳,列族,列,表格单元,行组成. 行一般由一个行键和一个或多个具有关联关系值 ...

  8. css3 奇技淫巧 - 如何给小汽车换个背景色谈起

    css3 的魅力,不容小觑.曾经被她折服,再度回首,依旧拜倒在她的石榴裙下.相信在未来,她仍然魅力依旧. 站在巨人的肩上学习,不断提升自身实力. 用 CSS 和颜色选择工具更改图片中的颜色,即如何给小 ...

  9. JWT(Json web token)简介

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(S ...

  10. Django 数据聚合函数 annotate

    统计各个分类下的文章数 2 周,3 日前 字数 3818 阅读 546 评论 21 在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优 ...