RabbitMQ学习记录

kamisamak 发布于 2020-12-06 1725 次阅读


[infobox title="什么是MQ"]
消息中间件MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。
在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而通过这种异步处理的方式可大量节省服务器请求响应时间,从而提高系统的吞吐量。
具体应用场景如下:
①任务异步处理
将不需要同步处理的并且耗时较长的操作由消息队列通知消息接收方进行异步处理。提高了应用响应时间。
②应用程序解耦合
MQ相当于一个中介,Producer通过MQ与Consumer交互,与应用程序进行解耦合。
③削峰填谷
如应用在高峰期时,并发量会突然激增,消息被MQ进行中间步骤处理,按服务器性能进行消费处理,降低在高峰期时与数据库写入操作瞬时频率,消费消息维持在一段时间内直至消费完剩余消息。
实现MQ的大致有两种主流方式:AMQP、JMS:
AMQP:AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。
JMS:JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
[/infobox]
[infobox title="RabbitMQ"]
RabbitMQ官方地址:rabbitmq.com
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
RabbitMQ提供了7种模式:简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式,RPC远程调用模式以及Publisher Confirms 发布者确认模式;

官网对应模式介绍:rabbitmq.com/getstarted.html
RabbitMQ 基础架构

RabbitMQ是AMQP协议的Erlang的实现。
| 概念 | 说明 |
| -------------- | ------------------------------------------------------------ |
| 连接Connection | 一个网络连接,比如TCP/IP套接字连接。 |
| 会话Session | 端点之间的命名对话。在一个会话上下文中,保证“恰好传递一次”。 |
| 信道Channel | 多路复用连接中的一条独立的双向数据流通道。为会话提供物理传输介质。 |
| 客户端Client | AMQP连接或者会话的发起者。AMQP是非对称的,客户端生产和消费消息,服务器存储和路由这些消息。 |
| 服务节点Broker | 消息中间件的服务节点;一般情况下可以将一个RabbitMQ Broker看作一台RabbitMQ 服务器。 |
| 端点 | AMQP对话的任意一方。一个AMQP连接包括两个端点(一个是客户端,一个是服务器)。 |
| 消费者Consumer | 一个从消息队列里请求消息的客户端程序。 |
| 生产者Producer | 一个向交换机发布消息的客户端应用程序。 |


消费者流转过程说明 展开 / 收起

[/infobox]
[infobox title="RabbitMQ中常用交换机实现"]
Hello World! 展开 / 收起

WorkQueues 展开 / 收起

Publish/Subscribe 展开 / 收起

Routing 展开 / 收起

Topics 展开 / 收起

[/infobox]
更新中

此作者没有提供个人介绍。
最后更新于 2020-12-06