Asynchronous Messaging: RabbitMQ Introduction
译自:https://dzone.com/articles/asynchronous-messaging-rabbitmq-introduction
By Janvn Aug.20.2019
提要:
了解RabbitMQ开源消息代理如何在微服务中进行异步通信。
正文:
RabbitMQ被认为是一种稳定的开源消息代理实现。它被许多人认为是JMS的自然演化。其所带来的是不同的和异构间的互操作性。实际上,例如,.Net中的客户端可以与Java上的消费者无缝地交换消息,而对这些消息中的任何一个都进行最小的更改。值得注意的是,RabbitMQ是使用Erlang构建的,Erlang是内置支持容错的电信系统中的主导语言。
RabbitMQ将AMQP(Advanced messaging queuing protocol高级消息队列协议)的使用提升为用于交换消息的线路级协议或网络协议。它是一种二进制协议,用于处理消息内容的编码和编组的低级细节。
在架构上,RabbitMQ具有以下优势:
可靠性:除了使用Erlang构建外,RabbitMQ还可以配置为持久化消息,以便在服务器崩溃时可以恢复所有消息。此外,生产者和消费者可以正确地接收/传递消息。
定制路由:RabbitMQ通过交换使用支持不同的路由机制,它可以通过直接路由提供点对点通信,选择性消息传递,类似于JMS消息选择器,这样只有携带某个“路由密钥”的事件才能传递到队列。
内置支持集群和高可用性:RabbitMQ的许多实例可以在单个群集下进行逻辑分组,以便在崩溃的情况下提供冗余并最终实现高可用性。
脚本和管理:RabbitMQ提供基于Web的控制台,用于监视和管理。此外,它还提供了一个命令行界面,可通过脚本自动执行其管理。
多功能性:针对不同平台/技术的客户端众多。
Terminology(术语)
由于看图更加直观,因此让我们从RabbitMQ文档中的高级原理图开始。
Publisher(发布者):发送消息源的一方。
Consumer(消费者):表示对一条或多条消息感兴趣的目标方。
Message Broker(消息代理):RabbitMQ中的消息传递解决方案。它由以下部分组成:
Exchanges(交换):描述消息代理上首先传递所有消息的中间端点/阶段的抽象。
Queues(队列):exchange发送消息的中间端点。
Route(路由):提供路由策略,以定义如何以及何时将exchange上的消息中继到队列。通常采用路由密钥的形式,并遵循绑定定义。
在下一部分中,我们将了解通过RabbitMQ交换信息的不同类型的交换和各种模式。