1. 程式人生 > 其它 >生產者消費者模式_RabbitMQ指南之三:釋出/訂閱模式(Publish/Subscribe)

生產者消費者模式_RabbitMQ指南之三:釋出/訂閱模式(Publish/Subscribe)

技術標籤:生產者消費者模式

在上一章中,我們建立了一個工作佇列,工作佇列模式的設想是每一條訊息只會被轉發給一個消費者。本章將會講解完全不一樣的場景: 我們會把一個訊息轉發給多個消費者,這種模式稱之為釋出-訂閱模式。

為了闡述這個模式,我們將會搭建一個簡單的日誌系統,它包含兩種程式:一種傳送日誌訊息,另一種接收並列印日誌訊息。在這個日誌系統裡,每一個執行的消費者都可以獲取到訊息,在這種情況下,我們可以實現這種需求:一個消費者接收訊息並寫入磁碟,另一個消費者接收訊息並列印在電腦螢幕上。簡單來說,生產者釋出的訊息將會以廣播的形式轉發到所有的消費者。

1、交換器(Exchange)

在前兩章節我們,我們往佇列中釋出訊息或獲取訊息,然而,前面的講解其實並不完整,接下來,是時候介紹完整的RabbitMq訊息模型了。

回憶一下我們前兩章指南中包含的內容:

  • 一個生產者用以傳送訊息;
  • 一個佇列快取訊息;
  • 一個消費者用以消費佇列中的訊息。

RabbitMq訊息模式的核心思想是:一個生產者並不會直接往一個佇列中傳送訊息,事實上,生產者根本不知道它傳送的訊息將被轉發到哪些佇列。

實際上,生產者只能把訊息傳送給一個exchange,exchange只做一件簡單的事情:一方面它們接收從生產者傳送過來的訊息,另一方面,它們把接收到的訊息推送給佇列。一個exchage必須清楚地知道如何處理一條訊息。

0e6a40509f116c1ca58c43f84f2ba17a.png

有四種類型的交換器,分別是:direct、topic、headers、fanout。本章主要講解最後一種:fanous(廣播模式)。下面建立一個fanout型別的交換器,我們稱之為:logs:

1 channel.exchangeDeclare("logs