使用RabbitMQ縮放Windows服務

2021-08-08 14:11:35 字數 2318 閱讀 3229

crossbased

to freshbrewedcode.com

)雖然有共享庫,但仍然有很多重複的**。

這些服務中的大多數都是單執行緒的,而不是設計為超越單個例項。

由於我們的平台必須能夠在發生突發新聞或天氣事件時響應巨大的活動峰值,所以我們需要找出更好的滑鼠陷阱。

在本年初早些時候參加過幾次關於分布式架構的納什維爾.net使用者組講座

[1],我從開始就開始了乙個良好的開端。

基於訊息佇列的系統似乎是明顯的答案。

「競爭消費者」模式來自  

企業整合模式

,並描述了一種基於訊息的系統,其中多個消費者收聽單個訊息佇列,只允許乙個消費者處理任何給定的訊息。

使用訊息佇列的優點是,如果這些消費者是同一臺機器上的應用程式(或執行緒)的多個例項,或者分布在多個物理機器上,則不會有任何差異。

利用此模式與訊息佇列平台,建立提供負載平衡,可擴充套件性和冗餘的系統幾乎是微不足道的。

您仍然專注於實施處理單個訊息所需的業務邏輯。

如果您還沒有安裝rabbitmq server,請轉到  

頁面,然後單擊適用於您的平台的相應安裝指南。

erlang

。我還建議您安裝  

管理外掛程式

,這將為您提供乙個基於web的ui來監控和管理rabbitmq server。

您可以使用

nuget

輕鬆地將最新的rabbitmq.client .net庫新增到visual studio專案中  

。讓我們來看看一些演示發布和消費訊息的**。

以下是伺服器/發行商的**  

// set up the rabbitmq connection and channel

var connectionfactory = new connectionfactory

;using (var connection = connectionfactory.createconnection())

using (var channel = connection.createmodel())

?", i+1);

var msgbytes = encoding.getbytes(msg);

channel.basicpublish("sample-ex", "optional-routing-key", false, false, properties, msgbytes);

}channel.close();

}console.writeline("messages published");

console.readkey(true);

這裡是客戶端/消費者的**  

// set up the rabbitmq connection and channel

var connectionfactory = new connectionfactory

;using (var connection = connectionfactory.createconnection())

using (var channel = connection.createmodel())

}}

實現模式的第乙個關鍵步驟是宣告乙個直接交換,它將基於路由資訊將訊息發布到單個訊息佇列。

通常使用的  

扇出交換機將訊息廣播到繫結到交換機的每個訊息佇列。

第二個關鍵步驟是配置消費者頻道的basicqos設定,以便它一次只能從佇列中提取乙個訊息。

如果沒有設定,那麼乙個消費者基本上可以暫停在佇列中等待的所有訊息,以便其他消費者都不能訪問它們。

這些訊息將保持在「消費」但未確認的狀態,直到乙個消費者處理,完全失敗了實現該模式的目的!

在配置basicqos上沒有很多文件可用,所以我必須弄清楚這個要求。

最後一步是確認訊息已被處理,允許rabbitmq伺服器從佇列中刪除訊息,消費者可以接收下乙個可用訊息。

執行示例** 。

載入和構建解決方案。

啟動兩個或多個命令提示以用作消費者。

將每個命令提示符的當前目錄更改為[your-project-root]\competingconsumers.consumer\bin\debug並啟動competingconsumers.consumer.exe在visual studio中,按f5啟動competingconsumers.publisher。

Win7安裝RabbitMQ及初步使用

rabbitmq是開源的訊息 中介軟體,訊息佇列主要解決非同步處理 應用解耦 流量削峰 訊息通訊。分布式系統中,使用訊息中介軟體進行系統間的資料交換。使用erlang語言開發的,基於amqp協議實現,更多的用於企業系統內,因為其對資料一致性 穩定性 可靠性處理的很好,其次是效能和吞吐量。支援分布式部...

delphi 設定win10 dpi 縮放規則

一 dpi介紹 dpi是 dots per inch 的縮寫,表示每英吋的畫素點個數,也就是畫素點的密集度。dpi 總畫素點 總面積 比如乙個32寸的顯示,但解析度只有1920 1440,而乙個24寸的顯示器,解析度卻達到3840 2160,很明顯後面這個顯示器的每英吋的畫素點的個數多,顯示的畫面更...

rabbitmq簡單使用

安裝rabbitmq,進入sbin執行rabbitmq service start 傳送者 package com.zhy.rabbit.01 import com.rabbitmq.client.channel import com.rabbitmq.client.connection impor...