Java与RabbitMQ交互实战教程之RabbitMQ相关概念介绍(一)

前言:

        由于所在开发项目中已经有异步处理需求的开发,而自己对于MQ与Java信息交互知识比较薄弱,故在CSDN上找博客自我学习,参考自https://blog.csdn.net/RobertoHuang/article/details/79524427,写的十分详细明了,同时也想把自我学习过的笔记以及问题进行记录,也方便以后能够回顾,大概将本系列文章分为如下部分:

1.RabbitMQ相关概念介绍
2.RabbitMQ Java Client使用
3.使用Spring AMQP整合RabbitMQ
4.使用@RabbitListener注解进行消息消费

5.RabbitMQ的异常处理
6.RabbitMQ消息可靠性保障
7.RabbitMQ的常用属性介绍
8.使用RabbitMQ进行异步RPC通信
9.使用SpringBoot整合RabbitMQ

概念介绍:

       

流程介绍:

        RabbitMQ的主要流程:生产者将消息发送到交换机(Exchange),交换机根据不同路由规则将消息路由到已经绑定到该交换机且符合路由规则的队列中去,消费者通过监听队列来获取消息。注:交换机不存储消息,默认情况下消息如果没有被正确路由到相应队列,该消息将会被丢弃。

 

消息:

      消息是服务器与应用程序之间传送的数据,由Properties和Payload(Body)组成,Message具有如下属性 :

属性属性描述
Routing keyRouting key (用来匹配队列Queue)
Delivery mode是否持久化 :Persistent持久化   /  Non-persistent不持久化
Headers头信息,是由一个或多个键值对组成的,是AMQP协议留给AMQP实现做扩展使用的
PropertiesAMQP提供的部分属性
Payload消息体

 

队列:

        队列是消息的载体,每个消息都应该被投入一个或多个队列,Queue具有如下属性 :

 

属性名属性描述
Virtual host虚拟主机
Name队列名称,同一个Virtual host下不能有相同的Name
Durability是否持久化,Durable:是 Transient:否
Auto delete如果该队列没有任何订阅的消费者的话,该队列会被自动删除
Arguments参数,是AMQP协议留给AMQP实现做扩展使用的

 

绑定:

       RabbitMQ中的绑定通常是指交换机与队列的绑定关系(交换机与交换机绑定极少使用),Binding有如下属性 

属性名属性描述
To queue / To Exchange队列名称 / 交换机名称
Routing keyRouting key
Arguments路由参数(只有Headers Exchange是根据参数路由的,故只有Headers Exchange需要设置该参数)

 

Default Exchange不能进行Binding也不需要进行Binding

除了Default Exchange之外其他任何Exchange都需要和Queue进行Binding,否则无法进行消息路由

Direct Exchange、Topic Exchange进行Binding的时候需要指定Routing key

Fanout Exchange、Headers Exchange进行Binding的时候不需要指定Routing key
 

交换机:

属性属性描述
Virtual host虚拟主机
Name交换机名称,同一个Virtual host下不能有相同的Name
Type交换机类型
Durability是否持久化,Durable:是 Transient:否
Auto delete当最后一个绑定被删除后,该交换机将被删除
Internal是否是内部专用exchange,是的话就意味着我们不能往exchange里面发送消息
Arguments参数,是AMQP协议留给AMQP实现做扩展使用的

       RabbitMQ内置一个名称为空字符串的默认交换机,它根据Routing key将消息路由到与队列名与Routing key完全相等的队列中

 

扇形交换机:

        扇形交换机(Fanout Exchange)会把能接受到的消息全部发送给绑定到自己身上的队列,扇形交换机在路由转发的时候忽略Routing Key。因为广播不需要思考所以扇形交换机处理消息的速度是所有交换机类型里面最快的

 

直连交换机:

直连交换机(Direct Exchange)是一种带路由功能的交换机,它将消息中的Routing key与该交换机关联的所有Binding中的Routing key进行比较,如果完全相等则将消息发送到Binding对应的队列中,适用场景:根据任务的优先级把消息发送到对应的队列中,分配更多资源处理优先级高的队列

 

主题交换机:

       主题交换机(Topic Exchange)与直连交换机相比主题交换机的Routing key支持通配符,它将消息中的Routing key与该交换机关联的所有Binding中的Routing key进行比较,如果匹配上对应的匹配规则则将消息发送到Binding对应的队列中

*:匹配一个单词
#:匹配0个或多个单词

如果Binding中的Routing key不包含*,#,则表示相等转发,类似于Direct Exchange 
如果Binding中的Routing key为#或者#.#,则表示全部转发,类似于Fanout Exchange

 

首部交换机:

        首部交换机(Headers Exchange)[不常用 了解即可]在进行路由转发的时候会忽略Routing Key,它将消息中的Headers与该交换机关联的所有Binding中的参数进行匹配,如果匹配上则将消息发送到Binding对应的队列中。它的匹配规则有下列两种类型

匹配规则
x-match = any则表示只要有键值对匹配就能转发消息
x-match = all则表示所有的键值对都匹配才能转发消息

注:Binding的时候至少需要指定两个参数,其中一个是x-match = all/any

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值