RabbitMQ入门教程要点总结
这篇文章是关于使用 RabbitMQ 的要点的整理文章,并配有图解。主要总结了 RabbitMQ 教程的信息,同时也参考了教程外获得的信息进行解释。
RabbitMQ 是什么?
在教程的开头提到了RabbitMQ是一个消息代理,也就是一个中间人。
RabbitMQ是一款实现“消息队列”功能的软件。简单来说,“消息队列”是指在应用程序之间交换数据时,不直接进行交互,而是通过一个队列来缓存发送方的数据。通过这种方式,可以获得以下优点,例如:
-
- 送信側は、受信側の処理の終了を待つ必要がなく次の処理を続行できる
-
- 送信側と受信側に分離されるため、疎結合なデザインになりやすい
- 各アプリケーションをステートレスにしやすくスケールアウトしやすくなる
绘制四个角色的图解。
为了理解RabbitMQ的概述,需要了解四个角色:Producer(生产者)、Exchange(交换机)、Queue(队列)和Consumer(消费者)。如下图所示。
理解每个登场的角色。
从这里开始,我们会详细观察每个角色。
制片人
这是关于发送消息的程序。在发送时,需要指定以下三项。
-
- メッセージ送付先の Exchange 名
-
- routing key
- メッセージ
与其直接将消息发送到队列中,我们指定了交换机名称并将消息发送到交换机。由于不需要考虑接收方,可以说它有助于实现松耦合化。
消费者 zhě)
只需要考虑从哪个队列接收消息即可,这是关于接收消息的程序。不需要考虑消息是如何被发送的。
交换
Exchange 和 Queue 是用来进行消息与配送方式之间的对应的。
(explanation: Exchange and Queue are used for mapping messages to delivery methods)
在Exchange中进行设置需要输入自己的Exchange名称和Exchange类型。根据Exchange类型,可以设置如何传递消息。例如,以下是一些类型的示例。
-
- fanout (exchange と紐付いた全てのキューにメッセージをブロードキャストする)
-
- direct (ルーティングキーがバインディングキーとマッチするときのみ配送する)
-
- topic (ルーティングキーを fast.orange.rabbit のように「.」区切りで指定する。ルーティングキーがバインディングキーのパターンとマッチするときのみ配送する)
- 無指定 (この場合は、ルーティングキーで指定したキューに配送する)
排队
就如其名,队列的作用是用于创建队列时所需的两个信息,换句话说就是设置队列希望接收的数据。
-
- どの Exchange と紐付けるか
- binding key
通过参考消息的路由键,将与绑定键匹配的消息排入队列。
交易类型 yì
对于上述所述的Exchange Type,有几种类型,例如”fanout”、”direct”和”topic”,分别描述它们的行为。
另外,每个教程的链接都是针对Python的,但也可以适用于许多其他语言。
扩散
这是用于实现Publish/Subscribe的东西。它在教程的第3章中被介绍。
将消息分发到与“Exchange”相关联的所有队列,如图所示。
请直接用中文转述以下内容:
这是教程第4章中讨论的内容。虽然章节标题是”Routing”,但根据消息类型的不同,我们可以使用”direct”作为 Exchange Type,以便将消息传递给适当的接收者。
以下的示意圖是根據日誌紀錄嚴重程度(錯誤、警告、資訊)來改變交貨地點的例子。
接收方首先创建了一个队列。在这个过程中,使用绑定键指定希望接收的消息的严重程度。由于绑定键可以设置两个或更多项,因此也可以指定error、warning、info的三个选项。
当发信者发送消息时,可以通过路由键指定消息的严重程度。这样,只有与绑定键匹配的队列才会收到该消息的投递。
主题
这是在《教程》第5章“主题”中涉及的内容。
如果 Exchange Type 是 Topics 的情况下,路由键会使用类似 fast.orange.rabbit 这样的「.」分隔符进行指定。这是只有当路由键与绑定键的模式匹配时才会发送的模式。
在設置綁定鍵時,可以使用兩個特殊符號。
-
- (*) は 1 ワード
- (#) はゼロ個、もしくは複数個のワード
举例来说,如果绑定键是”#.rabbit”,那么无论是”fast.orange.rabbit”、”black.rabbit”还是”rabbit”,都可以接收到消息。
而如果绑定键是”fast.*.rabbit”,那么只有”fast.orange.rabbit”才会被接收,而像”fast.rabbit”这样的消息则不会被接收。
消息队列还有其他选项吗?
我已经给出了关于RabbitMQ的说明,但除了RabbitMQ之外,还存在许多其他的消息队列实现和服务。在选择时,有一个有用的幻灯片可供参考。
Slideshare: 如何选择支持流式处理的排队系统。
就观点而言,我认为吞吐量、延迟以及是否能够实现我们想做的事情是关键。此外,主要的云服务提供商都提供完全托管的消息队列服务。虽然涉及到成本考量,但我认为管理完全托管的服务更为轻松。
请参考。
Slideshare: 选择支撑流处理的队列系统的方法
格力工程师的博客:使用AMQP进行消息传输
CyberAgent:开发者博客:Apache Kafka与Google Cloud Pub/Sub主要功能比较。