RabbitMQ 簡單的生產者 消費者模式

2022-09-10 02:00:22 字數 1860 閱讀 9575

rabbitmq 是乙個訊息**:它接受並**訊息。可以把它看成是乙個郵局:當你把你想要郵寄的郵件放在乙個郵筒裡時,你可以確信信使最終會把郵件送到您的收件人手中。在這裡,rabbitmq 充當了郵筒,郵局,信使的角色。

rabbitmq 與郵局的主要區別在於它不處理紙張,他所做的僅僅只是接收、**訊息。

下面是rabbitmq中使用到的幾個術語

生產者(p):訊息的傳送方,乙個程式如果傳送訊息,那麼他就是生產者

佇列(queue):佇列相當於rabbitmq裡面的乙個郵筒,儘管訊息流經過rabbitmq和你的應用程式,但是他們只能被儲存在佇列中。乙個佇列只受到主機的記憶體和硬碟限制,佇列在本質上是乙個大型的訊息緩衝區。大量生產者可以傳送訊息到乙個佇列,同時大量消費者也可以嘗試從佇列中獲取資料

消費者(c):消費者有類似接收的含義,乙個消費者就是一段主要等待接收訊息的程式

需要注意的是,消費者、生產者、**不一定要在同一臺主機上,實際上,在大多數應用中,他們都在同一臺主機上,乙個應用程式可以既是生產者又是消費者

下面將實際編碼,以便了解生產者-消費者模式的概念:

我們將使用c#編寫兩個程式,乙個是生產者,乙個是接受訊息並列印出來的消費者(筆者使用的環境是windows 10,vs2022,.net core 6.0)

using rabbitmq.client;

using system.text;

//該連線抽象了套接字連線,並為我們處理協議版本協商和認證等事宜

//這裡我們連線到本地機器上的 rabbitmq 節點,因此是 localhost。如果我們想連線到不同機器上的乙個節點,我們只需在這裡指定它的主機名或 ip 位址。

var factory = new connectionfactory() ;

using (var connection = factory.createconnection())

using (var channel = connection.createmodel())

]:hello world!";

var body = encoding.utf8.getbytes(message);

//向佇列發布乙個訊息。

RabbitMQ生產者消費者模型

生產者 mport pika connection pika.blockingconnection pika.connectionparameters host 127.0.0.1 建立乙個例項 channel connection.channel 宣告乙個管道 channel.queue decl...

NSCondition 多執行緒解決生產者消費者問題

import viewcontroller.h inte ce viewcontroller 資料緩衝區 property strong,nonatomic nsmutablearray products 執行緒鎖 property strong,nonatomic nscondition cond...

生產者Confirm訊息與Return訊息機制

訊息的確認,是指生產者投遞訊息後,如果broker收到訊息,則會給我們生產者乙個應答 生產者接收應答,用來確定這條訊息是否正常傳送到broker,這種方式也是訊息的可靠性傳遞的核心保障 channel開啟確認模式 channel.confirmselect 在channel上加監聽 addconfi...