RabbitMQ架构图和简介以及交换器模式

简介

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在不同的应用之间共享数据(跨平台跨语言)。RabbitMQ是使用Erlang语言编写,并且基于AMQP协议实现。

消息总线(Message Queue),是一种跨进程、异步的通信机制,用于上下游传递消息。由消息系统来确保消息的可靠传递。

作用

   1.异步处理场景说明:
  用户注册后,需要发注册邮件和注册短信。

   2.应用解耦
  场景说明:用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口。

   3.流量削锋
  流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。
  应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。

   4.日志处理:
  日志处理是指将消息队列用在日志处理中,比如Kafka的应用,解决大量日志传输的问题。
   5.消息通讯

优势

  

 劣势

  

AMQP高级消息队列协议

AMQP(Advanced Message Queuing Protocol) 高级消息队列协议:高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

AMQP中增加了Exchange和Binging的角色。生产者把消息发布到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到哪个队列。

架构图和解释

* Broker : 标识消息队列服务器实体rabbitmq-server

* v-host Virtual Host 虚拟主机。标识一批交换机、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制。vhost是AMQP概念的基础,必须在链接时指定,RabbitMQ默认的vhost是 /。

* Exchange: 交换器用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

* Queue : 消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

* Banding : 绑定,用于消息队列和交换机之间的关联。一个绑定就是基于路由键将交换机和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

* Channel 信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟链接,AMQP命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说,建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念,以复用一条TCP连接。

* Connection : 网络连接,比如一个TCP连接。

多种Exchange类型

https://github.com/yourZhang/study_java/tree/master/springboot-rabbitMq/rabbitmq-client01  配置和测试代码
网上查了很多资料有的说是五种,有的说是四种,看了一下官网一共有七种,这里只讲解常用的常见的五种模式

· 简单模式/"Hello World!"

生产者将消息交给默认的交换机(AMQP default),交换机将获取到的信息绑定这个生产者对应的队列上,监听当前队列的消费者获取消息,执行消息消费。

这种模式只需要创建队列,使用默认的交换器进行路由。

· 工作模式 / Work queues

生产者将消息交给默认的交换机(AMQP default),交换机将获取到的信息绑定这个生产者对应的队列. 由于监听这个队列的消费者较多,并且消息只能有一个被消费,就会造成消息竞争。多个队列绑定默认的交换器,交换器会采用轮询的方式进行推送。

· fanout / (Publish/Subscribe) /  发布订阅

生产者将消息给交换机,交换机根据自身的类型(fanout)将会把所有消息复制同步到所有与其绑定的队列,每个队列可以有一个消费者接收消息进行消费逻辑。需要我们自己创建交换器并进行绑定,创建多个队列进行绑定即可,若一个消费者绑定多个队列则进行轮询,因为mq有阅后即焚的特点,只能保证一个消费者阅读接受。常用于群发消息。

·路由模式 / Routing / direct

生产者将消息发送到交换机信息携带具体的路由key,交换机的类型是direct,将接收到的信息中的routingKey,比对与之绑定的队列routingkey。消费者监听一个队列,获取消息,执行消费逻辑。一个队列可以绑定一个routingKey也可以绑定多个。在消息进行路由时会携带一个routingKey寻找对应的队列。

·Topic/ 通配符匹配

生产者发送消息,消息中带有具体的路由key,交换机的类型是topic,队列绑定交换机不在使用具体的路由key而是一个范围值,例如: *.yell.*,hlll.iii,jjj.#。其中* 表示一个字符串(不能携带特殊字符)#表示任意

 

posted @ 2020-10-23 20:42  一半人生  阅读(4978)  评论(0编辑  收藏  举报