使用消費計劃。我創建了一個服務總線 nodejs 函式觸發器應用程式。
我不使用會話。使用兩個主題進行測驗 - 啟用/禁用磁區。
const timeout = ms => new Promise(res => setTimeout(res, ms))
module.exports = async function(context, mySbMsg) {
context.log('message start:', mySbMsg);
await timeout(60000)
context.log('message done:', mySbMsg);
};
主機.json:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
},
"extensions": {
"serviceBus": {
"prefetchCount": 1,
"messageHandlerOptions": {
"autoComplete": true,
"maxConcurrentCalls": 5,
"maxAutoRenewDuration": "00:09:30"
}
}
},
"functionTimeout": "00:09:55"
}
與WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT= 1
我希望每個 VM 運行 5 個請求/分鐘。
發送 100 條訊息,我希望每分鐘看到 5 條訊息。
我確實看到 1 個 vm 在實時指標中運行。但是,我在日志中每分鐘看到 1 條訊息。

uj5u.com熱心網友回復:
是的@Teebu,“ prefetchCount”:1 是罪魁禍首。
示例:
如果prefetchCount設定為 200,maxConcurrentCalls設定為 16(假設),那么 200 條訊息將被預取到特定實體,但一次只處理 16 條訊息。
預取的訊息可以由 獲取,MessageSender而MaxConcurrency僅由客戶端代碼處理。
MaxConcurrentCallsMessageReceiver- 單個行程同時處理多少條訊息。
PrefetchCount- 發起呼叫接收訊息時,單個MessageReceiver最多可以檢索多少條訊息。
為相同的值,將這兩個設定為counterproductive.
PrefetchCount應該大于同時處理的訊息數。
簡單來說:
MessageReceiverAzure Functions SDK 使用的底層預取的最大訊息數由prefetchCount.
為確保在等待處理時不會預取太多訊息并丟失鎖,請確保prefetchCount使用為 定義的值正確配置maxConcurrentCalls。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/475929.html
