2017-05-10 97 views
1

我有一個應該是觸發的web作業的web作業。我已經將它部署到了天藍,它被列爲觸發的webjob。但是,當我將東西添加到它具有功能的天藍色服務總線時。當我從UI觸發它的作品,並會回覆我的消息。當Azure服務總線上有消息時Azure觸發webjob不觸發

我的主機配置,像這樣

var config = new JobHostConfiguration 
     { 
      JobActivator = new MyActivator(container) 
     }; 
     config.UseServiceBus(); 
     var host = new JobHost(config); 
     host.RunAndBlock(); 

我的功能看起來像這樣

public void ProcessQueueMessage([ServiceBusTrigger("recipetest")] ProductName message, TextWriter log) 
    { 
     //code 
    } 

我一直在尋找了一段時間,但所有的谷歌搜索給了我回來了連續的網絡工作函數觸發器。任何人都可以告訴我如何讓網絡工作喚醒並處理消息。我發現大多數其他答案始終都在討論,但是觸發的工作應該始終在工作。

+1

是的,你需要一個連續的工作,「永遠在線」 – Thomas

回答

1

要使用ServiceBusTrigger,您的WebJob必須是連續的。

要添加更多的細節,ServiceBusTriggerAttribute實際上會在沒有找到消息的情況下使用退避輪詢它監視的消息隊列。因此,您可以看到添加到隊列中的消息不會「喚醒」WebJob並告訴它執行某些操作 - 而是使用ServiceBusTriggerAttribute輪詢,並會在新消息等待處理時發現。這就是爲什麼如果您使用ServiceBusTriggerAttribute,WebJob不能觸發。

+0

等待 - 它不像普通的服務總線隊列客戶端訂閱?輪詢對存儲隊列是必需的,但如果我需要實現任何遠程響應,輪詢就是一個殺手。 – Volker

+0

@Volker,這是正確的。 ServiceBusTrigger實際上是開源的,你可以親自看到它實際上通過輪詢來監視服務總線隊列。儘管這實際上可以處理大量的流量。您可以指定一次可以排列多少個郵件。您還可以指定輪詢之間的最大時間間隔。並且由於消息在讀取時被鎖定,如果您真的需要做飯,可以撥打檢查隊列的webjob實例的數量。 –

+0

我在哪裏可以找到源代碼?我從github獲得了sdk和擴展,但我沒有看到有關服務總線的任何信息。關於交通,我的擔憂不是吞吐量,而是往返時間。 – Volker

2

在我看來,連續webJob和觸發webjob之間的區別是如下:

連續webJob:始終運行在Web應用程序後端EXE。在Webjob SDK ServiceBusTrigger場景中,即使您的各個功能被「觸發」,WebJob也會持續運行(即您的exe繼續運行並執行其自己的內部觸發)。

觸發的webjob:按計劃或手動觸發。

注意:Webjobs全部由Web應用程序的進程運行,並且Web應用程序在空閒一段時間後會被卸載。這使系統節約資源。

因此連續和觸發(計劃的CRON)webjobs都需要「始終打開」。

相關問題