簡體   English   中英

Azure Functions [JavaScript / Node.js] - HTTP調用,良好實踐

[英]Azure Functions [JavaScript / Node.js] - HTTP call, good practices

從我的Azure函數(在Node.js中運行,由EventHub消息觸發)我想向一些外部頁面發布一個帖子請求。 就像是:

module.exports = function (context, eventHubMessages) {

var http = require("http");

context.log('JavaScript Function triggered by eventHub messages ');

http.request(post_options, function(res){
    ...
})

context.done();

上面的代碼可能會有效,但我懷疑這不是反模式。

想象一下在短時間內觸發了數千個函數的情況 - 對於每次執行,我們需要創建一個HTTP客戶端並創建一個連接......

通過簡短的研究,我發現了一些針對C#Azure功能的解決方案提議: https//docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/ ,它使用靜態HttpClient類。

我有一個問題,Node.js Azure功能中是否有類似的方法? 或者任何其他方法來避免這個問題,在Node.js Azure Function執行之間共享一個對象?

如果在短時間內觸發了數千個函數,則應通過修改http.globalAgent或傳遞新代理的實例來限制套接字

代理負責管理HTTP客戶端的連接持久性和重用。 它為給定的主機和端口維護一個待處理請求隊列,為每個隊列連接重新使用單個套接字連接,直到隊列為空,此時套接字被銷毀或放入池中,以便再次用於請求到同一個主機和端口。 它是被銷毀還是合並取決於keepAlive選項。

資料來源: https//nodejs.org/api/http.html#http_class_http_agent

http.globalAgent.maxSockets默認為無窮大,因此,除非您限制此值,否則您的函數將耗盡套接字,您將看到您的請求開始失敗。 此外,如果您計划連接到同一主機,則應在globalAgent/Agent上啟用keep-alive以啟用池化連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM