2016-12-13 53 views
2

我有一個將消息發佈到Azure服務總線主題的系統。該主題有多個訂閱者,我正在編寫一個webJob來處理這些消息。我應該使用一個還是多個Azure Web作業:

當我關心Visual Studio中的一個新的WebJob項目時,我得到一個名爲'Functions.cs'的類,它具有檢查隊列的代碼。我已經更新了代碼,在主題中檢查訂閱:

public static void ProcessTopicMessage([ServiceBusTrigger("topic-name", "subscription-name")] string message, TextWriter log) 
{ 
    // Processing goes here 
} 

這個主題的多個預訂,這是我需要監控,然後爲每收到一個消息,執行不同的操作。這將涉及通過API(每個訂閱的不同API)連接到第三方服務。

例子:

topic-name 
    subscription-1 // Perform action #1 
    subscription-2 // Perform action #2 
    subscription-3 // Perform action #3 
    ... 

我的問題是:我應該寫一個單獨的WebJob爲每個訂閱或者我應該添加其他方法進入「Functions.cs」類?

我不知道如果我在同一個WebJob中有多個方法,並且如果我需要使這些方法異步,性能是否會降低。

+1

http://stackoverflow.com/a/40295414/4167200 – Thomas

+0

感謝@Thomas。 :-) –

回答

1

我的問題是:我應該爲每個訂閱編寫單獨的WebJob,還是應該向「Functions.cs」類中添加其他方法?

根據您的要求,您有多個預訂對同一個主題進行上下文編排,每個訂閱都有不同的邏輯來處理同一個消息。

根據我的理解,由於多個訂閱共享相同的配置(Azure ServiceBus的應用設置),並且每個訂閱處理類似的邏輯。多個函數可以重用可以縮放到多個實例的同一個主機。我認爲同一個WebJob中的多個函數對你來說是更好的方法。

我想知道如果在同一個WebJob中有多個方法並且我需要使這些方法異步,性能是否會降低。

正如我所知道的,JobHost將在您的函數被觸發時從管理線程池啓動一個線程。你可以配置併發呼叫的最大數量從ServiceBus處理消息如下:

ServiceBusConfiguration.MessageOptions.MaxConcurrentCalls=20 //16 by default 

既然你會調用第三方API,你可以標記你的函數異步增加你WebJob的可擴展性。此外,還有一個關於性能異步的issue,您可以參考它。

1

爲每個訂閱或一個Web作業創建一個Web作業取決於您的要求。

例如:

多少時間才能處理完畢的要求?

回答這個問題將決定如果超過一個訂閱將高度影響性能或不

是否有SLA這個時間呢?

如果你對每個請求的SLA,那麼你可能需要擴展網絡的工作分成不同的一個爲每個訂閱,否則,一個就足夠

是否有每個訂閱任何特殊配置?

如果所有訂閱共享相同的連接,配置,那麼您可能不需要爲每個訂閱單獨的Web作業。

你也可以在你的戰略格局,以及每個訂閱移動到自己的類實現邏輯具體到每一個

相關問題