2016-11-24 63 views
1

有沒有辦法暫停連續的webjob - 停止從服務總線接收郵件的時間間隔? 我有一個系統,不斷收到發佈數據。然後發佈的數據被髮送到服務總線。我想知道是否有辦法停止處理消息。當然,其他解決方案不會發送這些消息 - 將它們保留在發送方系統中的隊列中。Azure服務總線連續Web工作暫停

+0

我猜想像創建一個時間框架,並檢查時間框架是否符合當前時間,如果它確實匹配沒有做任何事情 – 4c74356b41

+0

是的,但如果我這樣做,我仍然收到消息。似乎不是最優雅的解決方案。也許最好的是甚至不發送消息,但我想知道是否有更好的方式,因爲我不想花時間實現排隊機制 –

+0

您的webjob是否使用servicebustrigger? – Thomas

回答

1

您可以通過在應用程序設置中將WEBJOBS_STOPPED設置爲1來停止網絡作業。這有點粗糙,但它停止了webjob。

0

您已經有排隊機制...服務總線。這聽起來像你正在通過使用ServiceBusTrigger屬性聲明式連接到隊列。即

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log) 

但這不是在連續的webjob中接收消息的唯一方法。您可以使用QueueClient對象來很容易地接收這些消息:

var connectionString = "//connection string here//"; 
var queueName = "samplequeue"; 

var client = QueueClient.CreateFromConnectionString(cnStr, queueName); 

client.OnMessage(message => 
{ 
    string msg = message.GetBody<string>(); 
    // Process message here... 
}); 

Console.ReadLine(); 

(有關詳細信息,請參閱https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues

因此,在你webjob,你可以聆聽到兩條總線:首先是操作你已經在使用它來處理你的商業信息。新主題是控制總線。它總是在監聽,但是當你想改變操作隊列的行爲時,你只發送一條消息。

所以你發送「開始」的控制總線。收到該消息將調用上面的代碼並使運行總線開始處理消息。

如果要停止處理,請將「STOP」發送到控制總線。收到此消息後,請致電總線上的client.Close();。這暫停了對消息的處理,直到收到下一個「START」消息。

當然,您可以對此進行擴展。例如,您可以向控制總線發送「PAUSE 10 MINUTES」,這可能會停止運行總線,然後設置一個定時器以在10分鐘後重新啓動它。你只受到你的想象力的限制!

就個人而言,我可能會使用Json消息而不是純文本,但任何適合您的需求。