RabbitMQ入门教程要点总结

这篇文章是关于使用 RabbitMQ 的要点的整理文章,并配有图解。主要总结了 RabbitMQ 教程的信息,同时也参考了教程外获得的信息进行解释。

RabbitMQ 是什么?

在教程的开头提到了RabbitMQ是一个消息代理,也就是一个中间人。

RabbitMQ是一款实现“消息队列”功能的软件。简单来说,“消息队列”是指在应用程序之间交换数据时,不直接进行交互,而是通过一个队列来缓存发送方的数据。通过这种方式,可以获得以下优点,例如:

    • 送信側は、受信側の処理の終了を待つ必要がなく次の処理を続行できる

 

    • 送信側と受信側に分離されるため、疎結合なデザインになりやすい

 

    各アプリケーションをステートレスにしやすくスケールアウトしやすくなる

绘制四个角色的图解。

为了理解RabbitMQ的概述,需要了解四个角色:Producer(生产者)、Exchange(交换机)、Queue(队列)和Consumer(消费者)。如下图所示。

2018-04-29 22.15.47 からのスクリーンショット.png

理解每个登场的角色。

从这里开始,我们会详细观察每个角色。

制片人

这是关于发送消息的程序。在发送时,需要指定以下三项。

    • メッセージ送付先の 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”相关联的所有队列,如图所示。

2018-04-29 22.22.27 からのスクリーンショット.png

请直接用中文转述以下内容:

这是教程第4章中讨论的内容。虽然章节标题是”Routing”,但根据消息类型的不同,我们可以使用”direct”作为 Exchange Type,以便将消息传递给适当的接收者。

以下的示意圖是根據日誌紀錄嚴重程度(錯誤、警告、資訊)來改變交貨地點的例子。

2018-04-29 22.28.16 からのスクリーンショット.png

接收方首先创建了一个队列。在这个过程中,使用绑定键指定希望接收的消息的严重程度。由于绑定键可以设置两个或更多项,因此也可以指定error、warning、info的三个选项。

当发信者发送消息时,可以通过路由键指定消息的严重程度。这样,只有与绑定键匹配的队列才会收到该消息的投递。

主题

这是在《教程》第5章“主题”中涉及的内容。

如果 Exchange Type 是 Topics 的情况下,路由键会使用类似 fast.orange.rabbit 这样的「.」分隔符进行指定。这是只有当路由键与绑定键的模式匹配时才会发送的模式。

2018-04-29 22.53.56 からのスクリーンショット.png

在設置綁定鍵時,可以使用兩個特殊符號。

    • (*) は 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主要功能比较。

广告
将在 10 秒后关闭
bannerAds