RabbitMQ消息中间件总结一

 

 

RabbitMQ是采用Erland语言实现AMQP(Advance Message Queuing Protrol,高级消息队列)的消息中间件。RabbitMQ是一个生产者和消费者模型,主要负责接收,存储和转发消息。传递过程类似于你将一个包裹送到邮局,邮局会暂存并最终将邮件通过快递员送到接受人的手上,RabbitMQ就类似于邮局、邮箱、邮递员组成的一个系统。

1.消息中间件是什么

消息:应用之间传送的数据(文本/json等)

消息中间件:message queue Middleware简称MQ。指利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式的集成。通过提供消息传递和消息排队模型。实现进程间的通信

消息队列中间:可称为消息队列或者消息中间件,传递方式分为两种点对点(P2P,Point-to-Potint)模式和发布订阅(Pub/Sub)模式

P2P:

  1. 点对点模式基于队列
  2. 发送者发送消息到队列,消费者从队列中接收消息
  3. 可以异步传输

Pub/Sub:

  1. 定义内容节点发布和订阅消息,这个内容节点称为主题,主题可以看作消息传递的中介,
  2. 发布者将消息发送到主题,订阅者从主题中订阅消息,从而使订阅和发布相互独立,用于一对多广播

2.作用

  •  解耦
  • 冗余(存储)
  • 扩展
  • 消峰
  • 可恢复性
  • 顺序
  • 缓存
  • 异步

2.生产者、消费者、Broker

生产者:producer,即投递消息的一方,生成着创建消息,然后发布到RabbitMQ中,一般包含两部分:消息体(Payload)和标签(Label)

  消息体:一般就是带有业务逻辑的数据比如json

  标签:设置的路由规则,将消息发送给RabbitMQ后,RabbitMQ会根据标签发送给对应的消费者,在消息存入队列中时,消息的标签会丢失,存到队列中的只有消息体

消费者:consumer,接收消息的一方。消费者连接到RabbitMQ服务器上并订阅到队列上。

队列:queue,RabbitMQ中的对象,用于存储消息,且RabbitMQ的消息只能存储到队列中

消息中间件的服务节点:Broker。RabbitMQ的一个服务节点或者RabbitMQ服务实例。

  1. 发送消费流程:

  

 

 

 

 

具体流程:

 

生产者

1.连接RabbitMQ Broker,建立一个连接,开启通道

2.生产者交换器和队列并设置相关属性

3.将交换器和队列进行绑定

4.生产者发送消息给RabbitMQ Broker

5.交换器根据路由查找相对应的队列

6.找到则存入队列,没有找到根据生产者的配置属性选择丢弃还是会退给生产者

7.关闭信道

8.关闭连接

消费者

1.连接到RabbitMQ,建议一个连接和信道

2.发送请求消费相对应的队列中的消息

3.等待Broker的回应,接收消息

4.消费者确认接收到消息

5.RabbitMQ从队列中删除相应的确认消息

6.关闭信道

7.关闭连接

交换器,路由键、绑定

交换器:RabbitMQ中的实体,生产者先把消息传输给交换器,由交换器把消息发送给一个或者多个队列。交换器类型分为四种:

1.fanout,交换器将消息发送给与交换器绑定的队列和其他交换器

2.direct:交换器完全按照路由规则进行匹配发送给相对应的队列或交换器

3.topic:direct的升级,进行模糊匹配

4.header:不依赖于交换器和队列几乎不使用该类型

路由键

 

RoutingKey:路由键,生产者发送消息到交换器一般指定RoutingKey,用户消息的路由,而这个RoutingKey需要与交换器和绑定键(Bindingkey)联合使用有效。联合使用即路由规则,决定消息流向哪里

Binding:绑定,将交换器和队列管理起来,在绑定的时候一般会指定一个绑定键(Bindingkey)

 

Connection/Channel

 与RabbitMQ Broker建立连接,实则建立了一条TCP连接,也就是Connection,连接建立好了,就可以创建AMQP信道(Channel),每个信道都会被指派一个唯一的ID,信道建立在Connection上的虚拟连接,RabbitMQ处理的每条AMQP指定都是通过信道完成的。

  引入信道的原因:创建一个TCP连接开启昂贵,在使用高峰时出现性能瓶颈,随即RabbitMQ采用NIO(Non-Blocking I/0)的做法,选择TCP连接复用,这样不仅减少开销,也方便管理。由于信道是非现场安全的,所有每个线程都应把持一个唯一的信道,从而复用Connection的TCP连接

 

 

 

posted @ 2019-11-15 16:20  无限环  阅读(390)  评论(0编辑  收藏  举报