下午好,哈布尔! 我想分享一本我设法收集的教科书参考书 RabbitMQ
并浓缩成简短的建议和结论。
目录
- RabbitMQ。 第 1 部分:简介。 Erlang、AMQP 和 RPC
- RabbitMQ。 第 2 部分:了解交换
- RabbitMQ。 第 3 部分:了解队列和绑定
- RabbitMQ。 第 4 部分:了解消息和帧是什么
- RabbitMQ。 第 5 部分:发布和消费消息性能
- RabbitMQ。 第 6 部分:Federation 和 Shovel 模块概述
- RabbitMQ。 第 7 部分. 有关 Connection 和 Chanel 的详细信息
- RabbitMQ。 第 8 部分..NET 中的 RabbitMQ
- RabbitMQ。 第 9 部分. 监控
简单介绍一下AMQP
AMQP(高级消息队列协议)是一种用于在系统组件之间传输消息的开放协议。 基本思想是,各个子系统(或独立应用程序)可以通过 AMQP 代理以任意方式交换消息,该代理执行路由、可能保证交付、分发数据流并订阅所需的消息类型。
协议 AMQP
引入三个概念:
exchange
(交换点或交换)- 消息被发送到它。 兑换点 分发消息 在一个或多个队列中。 她 将消息路由到队列 基于创建的链接(binding
)在他和队列之间queue
(队列)- 磁盘或 RAM 中的数据结构 存储消息链接并提供消息副本consumers
(对消费者)binding
(具有约束力)- 一条规则 告诉交换点这些消息应该进入哪个队列
协议运行在顶层
简单介绍一下Erlang
该项目的源代码位于存储库中
Erlang
公司开发的Ericsson
在 1980 世纪 99,999 年代中期,作为分布式、容错、实时系统,适用于需要 XNUMX% 正常运行时间的应用程序。Erlang
用于各种行业和现代应用,例如WhatsApp 架构,Facebook 以 19 亿美元收购
简单介绍一下RabbitMQ
RabbitMQ
实施和补充协议 AMQP
.
消息传递模型的主要思想 RabbitMQ
就是这样 producer
(发布者)不直接将消息发送到队列。 事实上,通常情况下,发布者甚至根本不知道消息是否会被传递到任何队列。
相反,发布者只能将消息发送到交换器。 一方面,交换器接收来自发布者的消息,另一方面,它将它们发送到队列。 交换必须确切地知道如何处理它收到的消息。 是否应该将其添加到特定队列中? 是否应该将其添加到多个队列中? 或者应该忽略该消息。
简短的工作 RabbitMQ
可以描述如下:
- 发布者向特定交易所发送消息
- 交换机收到一条消息后,根据它与队列之间的绑定规则将其路由到一个或多个队列
- 队列存储对此消息的引用。 消息本身存储在 RAM 或磁盘上
- 一旦消费者准备好从队列接收消息,服务器就会通过链接创建消息的副本并发送
- 消费者收到消息并向broker发送确认
- 代理收到确认后,会从队列中删除消息的副本。 然后从 RAM 和磁盘中删除
RPC的
过程 RabbitMQ
。 例如,关于客户条款的初步讨论 RabbitMQ
,展示一定的过程 RPC
。 一旦这个序列完成, RabbitMQ
将准备好接受客户端的请求:
规范中也有 AMQP
客户端和服务器都可以发出命令。 这意味着客户端正在等待与服务器通信。 命令是类和方法。 例如, Connection.Start
– 方法调用 Start
类 Connection
.
连接和通道
对于客户端和服务器之间的此类信息交换, 频道。 通道创建于 具体连接。 每个通道都与其他通道隔离。 在同步情况下,在收到响应之前不可能执行下一个命令。
为了能够并行发送命令,您必须打开多个通道。 每个通道创建一个单独的 Erlang
过程。 一个连接可以有多个通道(
使用创建连接和通道的简单示例
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
强烈建议不要为每个操作打开一个新连接,因为这样 会导致高昂的成本。 通道也应该是持久的,但是许多协议错误会导致通道关闭,因此通道的生命周期可能比连接的生命周期短。
RabbitMQ用在哪里?
在微服务的背景下,协议 AMQP
及其实施 RabbitMQ
经常用于 异步交互 服务之间。
在上下文中 IIOT
协议 AMQP
及其实施 RabbitMQ
用于服务器(服务器-服务器)之间的数据交换。 也可以使用插件
在下一篇文章中,我们将开始更详细地了解交易所。
引用
来源: habr.com