簡體   English   中英

使用 Azure 服務總線發布/訂閱

[英]Publish/subscribe with Azure Service Bus

我有一個微服務(Web API),它將消息發布到一個主題(主題 A)。

現在我有另一個微服務(Web API)應該訂閱這個主題並對消息采取行動。

我的問題很簡單:我應該怎么做,因為我應該訂閱 Topic 的微服務是一個 WebApi? 在我的 web api 中,我想以某種方式立即知道主題中何時有新消息可用。 我應該通過端點輪詢服務總線嗎?

我不確定這方面的最佳實踐。

我見過的所有使用控制台應用程序訂閱的示例。 但這不是我的情況,因為我有一個 web api。

有不同的方法可以做到這一點。

1. 使用Azure 函數

這樣您就可以創建兩個應用程序。 您的標准 Web api,並單獨創建一個 Azure 函數來處理來自隊列的消息。 這種方法有很多好處,其中之一就是你隔離了處理隊列的代碼,所以如果你有很多消息,它不會影響你的 API 的性能

2.在 Web 應用程序中使用Singleton 服務

這里的想法是您的 API 應用程序在后台處理隊列消息。 這樣做的好處是您只有一個應用程序可以完成所有工作,例如易於維護。 它的缺點是大量的消息流入會減慢您的 API。

(注意,在上面的鏈接中查找從隊列中使用消息

無論是WebAPI還是console ,溝通和收集記錄都是消費者的責任。 作為一個 WebAPI 並不意味着它應該只有公共端點。 典型的 WebAPI,可能具有公共端點(用於外部世界)或可以具有私有端點(用於內部通信)或可以具有兩者的組合。 私有端點的職責可能是從服務數據存儲中讀取數據,通過適配器服務使用外部服務等。在您的情況下,在您的 WebAPI 初始化時,您可能希望創建一個使用者對象並開始讀取數據並根據需要進行處理. 希望這有幫助。

您可以在 Web 作業或后台任務中進行輪詢。 但內置的方法是使用從主題觸發的Azure 函數,或使用Azure 事件網格

要在后台收聽,您可以使用IHostedService 內部方法StartAsync

您可以注冊消息處理器;

  queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions)

StopAsync您可以停止處理消息並關閉客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM