上篇《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-必须知道的几个概念的更多相关文章

  1. rabbitMQ第五篇:Spring集成RabbitMQ

    前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...

  2. RabbitMQ第四篇:Spring集成RabbitMQ

    前面几篇讲解了如何使用rabbitMq,这一篇主要讲解spring集成rabbitmq. 首先引入配置文件org.springframework.amqp,如下 <dependency> ...

  3. spring集成rabbitMq(非springboot)

    首先 , pom文件需要加入spring集成rabbitMq的依赖: <dependency> <groupId>org.springframework.amqp</gr ...

  4. spring集成RabbitMQ配置文件详解(生产者和消费者)

    1,首先引入配置文件org.springframework.amqp,如下: <dependency> <groupId>org.springframework.amqp< ...

  5. Spring 集成 RabbitMQ

    pom.xml <dependency> <groupId>org.springframework.amqp</groupId> <artifactId> ...

  6. spring集成rabbitmq

    https://www.cnblogs.com/nizuimeiabc1/p/9608763.html

  7. Spring集成RabbitMQ-使用RabbitMQ更方便

    如果提到Spring,你脑海中对他的印象还停留在SSH三大框架之一,那或许你该好好重新认识这个家伙. 在IT技术日新月异的今天,他还能让你忘不了并与他朝夕相处,他,肯定有自己的绝活.如今他早已经不是孤 ...

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

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

  9. Spring集成RabbiMQ-Spring AMQP新特性

    上一篇<Spring集成RabbitMQ-使用RabbitMQ更方便>中,我们只需要添加响应jar的依赖,就可以写一个Spring集成RabbitMQ下非常简单收发消息的程序. 我们使用的 ...

  10. Spring 集成rabbiatmq

    pom 文件 <dependencies> <dependency> <groupId>com.rabbitmq</groupId> <artif ...

随机推荐

  1. java第二课,java基础2

    关键字:            在java中被赋予了特殊含义的单词,具有特殊用途.   标识符:               由字母,数字,下划线(_),美元符($)组成,不能以数字开头,不能是jav ...

  2. tcp入门(唐唐的故事)

    1,互联网的实现,分成好几层.每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持.把互联网分成五层,容易让人理解. 2,对这五层的理解(唐唐讲故事): 实体层:目的就是把计算机连接起来,用电气 ...

  3. USB的包结构及包分类

    USB的传输总是低位在前,高位在后. USB的传输方向:从设备到主机的数据为输入:从主机到设备的数据叫做输出. 1. 包结构 以同步域开始,紧跟着一个包标识符PID(Packet Identifier ...

  4. vue.js移动端app实战1:初始配置

    本系列将会用vue.js2制作一个移动端的webapp单页面,页面不多,大概在7,8个左右,不过麻雀虽小,五脏俱全,常用的效果如轮播图,下拉刷新,上拉加载,图片懒加载都会用到.css方面也会有一些描述 ...

  5. 【css】盒子模型 之 弹性盒模型

    参考: http://caibaojian.com/flexbox-guide.html 待补充啊

  6. AmazeUI(妹子UI)中CSS组件、JS插件、Web组件的区别

    AmazeUI(妹子UI)是非常优秀的国产前端UI,现在来介绍一下AmazeUI中CSS组件.JS插件与Web组件的区别. CSS组件顾名思义就是仅使用CSS渲染而成的组件,而JS插件也很容易理解,就 ...

  7. 前端开发之css篇

    一.css简介 css(Cascading Style Sheets)层叠样式表,是一种为html文档添加样式的语言,主要有两个功能:渲染和布局.使用css主要关注两个点:查找到标签,属性操作 二.c ...

  8. Javascript数组(1)--基本属性及方法

    数组Array是Javascript语言中非常重要的两种引用类型数据之一,另外一种为对象Object.Array的数据模型可分为两种进行存储:堆栈结构.队列结构. 昨天,确切说是前天了,去和大学同学见 ...

  9. mysql忘记密码,修改密码重新安装的一些问题

    前言 想要装cobra,却意外发现mysql连接失败,命令行连一下发现无论怎么样都连不上了. 我能想到的密码都用上了,糟糕!看来只能修改密码,或者重装了. 最后是重装搞定的,当然也发现了正确的修改密码 ...

  10. --使用oracle数据先要创建表空间

    one\--创建表空间 CREATE TABLESPACE 表空间的名字DATAFILE 'E:\oracle\app\userdata\java5space.dbf' --表空间物理文件路径SIZE ...