Spring集成RabbitMQ-必须知道的几个概念
上篇《Spring集成RabbiMQ-Spring AMQP新特性》我们了解了最新spring-rabbit的2.0.0.M5版本相较于之前有哪些变化。其实使用Spring-amqp确实简单,其主要就一些jar包,比如spring-amqp,spring-rabbit等。这篇就通过几个基本概念来了解下Spring amqp和原生amqp在用法上有何不同。
消息体
在《RabbitMQ入门》系列中,我们如果要发送一条消息,都是转成字节数组的,类似这样
channel.basicPublish("", QUEUE_NAME, null, "hello world".getBytes());
但是在spring-amqp中,定义了一个消息类,用于存储消息实体和消息的属性信息。下面是该类的成员变量和方法
getBody就是获取消息体的内容,相当于上面的“hello world”
getMessageProperties可以得到有关消息本身的属性信息,比如messageId消息的id标识,timestamp时间戳等等的值
使用这将上面属性的值通过setHeader(String key, Object value)方法添加到消息类中
Exchange
读过《RabbitMQ入门》系列,想必对于Exchange应该就不会陌生。在RabbitMQ是实际上所有的消息都不是生产者直接送到消费者,而是需要经过一道Exchange。Exchange接收发送者发送的消息,并根据定好的路由规则将消息派发到相应的队列Queue中去,最终被消息者消费。
在原生的RabbitMQ中,我们通过类似这样的语句来指定需要使用哪种Exchange类型
channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
显然,这里声明的是Fanout的exchange模式。同时,我们注意到这里并没有一个与Exchange直面相关的类,来设置响应的属性。
在spring-amqp中,就针对Exchange单独定义了一个接口Exchange。
通过方法名,我们就很清楚知道每个方法是干什么的,比如isDurable用于判定是否持久化了
getType方法用于得到该Exchange是那种类型,前面我们已经说过,Exchange的类型主要有Direct、Fanout、Topic和Headers四种,相应的,也有四个实现类集成了接口Exchange,他们分别是DirectExchange、FanoutExchange、TopicExchange和HeadersExchange
下面我们看看DirectExchange和Exchange的关系
- 这四个实现类都是继承了抽象类AbstractExchange,而AbstractExchange也是Exchange的子类。
- DirectExchange的源码如下,我们可以看到其复写了getType方法,并赋值为ExchangeTypes.DIRECT
Queue
Queue是用来存储消息的,消费者从这里拿走消息并消费。与上面提到的Exchange类似,Spring-amqp中也是通过一个类Queue来定义了队列。
Queue有多种重载形式的构造函数,可以设置queue的名称,是否持久化,是否自动删除等等
有一些判断的函数,比如是否持久化了,是否设置了自动删除等
Binding
我们应该还记得在原生的RabbitMQ中,Fanout模式下是如何绑定Exchange和Queue的
channel.queueBind(queueName, EXCHANGE_NAME, "");
在Spring-amqp中,即使是绑定映射,也单独创建了一个类Binding
对于构造函数,后面我们通过几个例子就可以知道每个参数表示的含义
提供了一些函数用户获取绑定两端Exchange和Queue的基本信息
Direct模式的绑定
new Binding(someQueue, someDirectExchange, "foo.bar")
Fanout模式的绑定
new Binding(someQueue, someFanoutExchange)
Topic模式的绑定
new Binding(someQueue, someTopicExchange, "foo.*")
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。
Spring集成RabbitMQ-必须知道的几个概念的更多相关文章
- rabbitMQ第五篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- RabbitMQ第四篇:Spring集成RabbitMQ
前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...
- spring集成rabbitMq(非springboot)
首先 , pom文件需要加入spring集成rabbitMq的依赖: <dependency> <groupId>org.springframework.amqp</gr ...
- spring集成RabbitMQ配置文件详解(生产者和消费者)
1,首先引入配置文件org.springframework.amqp,如下: <dependency> <groupId>org.springframework.amqp< ...
- Spring 集成 RabbitMQ
pom.xml <dependency> <groupId>org.springframework.amqp</groupId> <artifactId> ...
- spring集成rabbitmq
https://www.cnblogs.com/nizuimeiabc1/p/9608763.html
- Spring集成RabbitMQ-使用RabbitMQ更方便
如果提到Spring,你脑海中对他的印象还停留在SSH三大框架之一,那或许你该好好重新认识这个家伙. 在IT技术日新月异的今天,他还能让你忘不了并与他朝夕相处,他,肯定有自己的绝活.如今他早已经不是孤 ...
- Spring Boot实战三:集成RabbitMQ,实现消息确认
Spring Boot集成RabbitMQ相比于Spring集成RabbitMQ简单很多,有兴趣了解Spring集成RabbitMQ的同学可以看我之前的<RabbitMQ学习笔记>系列的博 ...
- Spring集成RabbiMQ-Spring AMQP新特性
上一篇<Spring集成RabbitMQ-使用RabbitMQ更方便>中,我们只需要添加响应jar的依赖,就可以写一个Spring集成RabbitMQ下非常简单收发消息的程序. 我们使用的 ...
- Spring 集成rabbiatmq
pom 文件 <dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artif ...
随机推荐
- python基础(6):列表和字典类型
前面我们所接触的数据类型都是存单个值,今天我们来看看可以存多个值的列表和字典. 预习: 1.有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日 ...
- 玩玩微信公众号Java版之准备
微信自2013年流行起来,现在的发展已经超过了我们的想象,那么对应的公众平台,小程序等都是让人眼前一亮的东西,这里来学习一下微信工作号的对接,实现为Java,希望大家一起学习! 这里大概描述一下所 ...
- Abp(.NetCore)开发与发布过程2
在Abp(.NetCore)开发过程中遇到很多问题,今天记录下Abp的防CSRF功能(AntiForgeryToken ), 背景知识. AntiForgeryToken 可以说是处理/预防CSRF的 ...
- js实现日期显示的一些操作
1.js获取当前日期(yyyy-mm-dd) 以下代码是获取到的当前日期: var myDate = new Date(); var year = myDate.getFullYear(); //获取 ...
- RMAN备份到共享存储失败(win平台)
RMAN备份到共享存储失败(win平台) 之前在<Win环境下Oracle小数据量数据库的物理备份>这篇文章中,介绍了在win平台下对于小数据量的数据库的物理备份设计. 文中重点提到,强烈 ...
- C++学习(八)入门篇——复合类型
数组(需要声明以下三点): (1)存储在每个元素中值的类型 (2)数组名 (3)数组中的元素数 声明数组的通用格式如下: typeName arrayName[arraySize];arraySize ...
- (转)java 多线程 CountDownLatch用法
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...
- Angular页面加载后自动弹窗
首先在控制器内写好一个弹窗,我用的是ionic的默认提示对话框 // 一个确认对话框 $scope.showConfirm = function() { var confirmPopup = $ion ...
- docker在Centos上的安装
Centos6安装docker 系统:centos6.5 内核:3.10.107-1(已升级),docker对RHEL/Centos的最低内核支持是2.6.32-431,epel源的docker版本推 ...
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...