包含標籤 service-bus 的文章

菜雞抓蟲:Azure Functions ServiceBus Trigger 執行過久時會重複觸發 Functions

Image

TL;DR

當發現需要執行很久的 ServiceBus Trigger Function 有重複執行的情況出現時,可以嘗試到官方的 Host.json 設定指引,按照 SDK 版本找到對應的「訊息鎖定最大持續時間」設定,例如 maxAutoLockRenewalDuration(延伸模組 5.x+)或 maxAutoRenewDuration(Functions 2.x),並加入專案的 Host.json

因為 ServiceBus 在傳遞訊息之後,如果超過一段時間(MaxAutoRenewDuration)內沒有得到回應,就會解除信件的鎖並嘗試重新傳遞,這時候如果原先的 Function 仍在執行,就會一前一後重複執行 Function 並發生許多光怪陸離的事,例如寫入兩筆資訊、重複複製資料之類的。

建議如果調整了有 ServiceBus Trigger Function 的 Azure Functions Timeout 設定時,或是發現某支 ServiceBus Trigger 的 Functions 執行時間過長,就要一併注意 MaxAutoRenewDuration 的設定,避免重複執行的情況出現。

……

閱讀全文


使用 Azure Service Bus 來建立簡單的訊息佇列(Message Queue)吧

Image

在工作上遇到在兩個 Azure 工具間建立訊息佇列(Message Queue)的需求,因此接觸到了 Azure Service Bus(中文:服務匯流排 燴牛排?),在前輩的協助下建立了一組簡單的 Demo,這就來筆記一下。

什麼是訊息佇列(Message Queue, MQ)

首先讓我們簡單認識一下訊息佇列。假設我們有生產者和消費者兩個服務,其中生產者負責產生資料,而消費者負責消費這些資料

Image

各位也可以這樣理解:生產者就像是壽司師傅,他會不斷的捏壽司出來;而這時候來了一位大胃王顧客,他就是消費者,會不斷地把壽司吃掉

Image

大概對這兩個角色有點認識就行了。那麼,假設我們有兩組 API 服務:其中一個是負責寫入 Log 的服務,而另一個是產品服務。

產品服務會將 Log 內容丟給 Log 服務去紀錄 Log,這時候產生了這些日誌資料的產品服務就是生產者,而消費這些日誌資料去寫 Log 的服務就是消費者。

也就是:產品服務(生產者) —— 資料 —> Log 服務(消費者) 這樣的狀況。

然而像這樣直接相依的兩個服務,可能就會遇到一些問題:像是消費者突然掛掉,導致生產者也跟著掛掉;又或是消費者的變動和擴展會連帶影響到生產者必須跟著變動等等。

……

閱讀全文