Simple Message Queue (formerly MNS)的隊列(Queue)作為事件來源通過事件匯流排EventBridge與Function Compute整合後,通Simple Message Queue (formerly MNS)隊列觸發器能夠觸發關聯函數執行,通過函數可以對發布到Simple Message Queue (formerly MNS)隊列中的訊息進行自訂處理。本文介紹如何在Function Compute控制台建立Simple Message Queue (formerly MNS)隊列觸發器、配置函數入口參數和編寫代碼並測試。
功能簡介
您在Function Compute的控制台提交觸發器建立請求之後,Function Compute會根據觸發器的配置資訊,自動在事件匯流排EventBridge側建立事件流資源。
建立完成後,您可以在Function Compute控制台查看觸發器資訊,同時也可以在事件匯流排EventBridge控制台查看自動建立的資源資訊。當源Simple Message Queue (formerly MNS)隊列中有訊息入隊時,將會觸發Function Compute執行。執行時會根據您的攢批配置,將一個或多個訊息事件以批的形式推送到函數中進行處理,適合端到端的流式資料處理情境。
注意事項
作為觸發源的Simple Message Queue (formerly MNS)隊列必須和Function Compute的函數所在的地區相同。
建立的事件流數量超過上限後,將無法再建立Simple Message Queue (formerly MNS)隊列觸發器。
在單個阿里雲帳號單個地區維度下,關於建立觸發器涉及的資源數量的限制,請參見使用限制。
前提條件
事件匯流排EventBridge
Function Compute
Simple Message Queue (formerly MNS)
步驟一:建立觸發器
當您已經建立好Simple Message Queue (formerly MNS)的隊列,您需要登入Function Compute控制台,進入目標函數,選擇配置頁簽,建立觸發器,建立完成點擊確定如下圖所示。
上圖中的配置項如下所示。
調用方式:
同步調用:適用於順序調用情境。單個(批)事件觸發函數調用,等待函數執行完成返回結果後,再由下一個(批)事件繼續觸發函數調用。同步調用請求本文承載最大為32 MB。更多資訊,請參見同步調用。
非同步呼叫:可以快速消費事件。單個(批)事件觸發函數調用,Function Compute會立刻返迴響應,再由下一個(批)事件繼續觸發函數調用。該過程中函數會非同步執行。非同步呼叫請求本文承載最大為128 KB。更多資訊,請參見非同步呼叫。
關於推送配置、重試和死信等進階配置項說明,請參見觸發器進階功能。
建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。
步驟二:(可選)配置函數入口參數
Simple Message Queue (formerly MNS)事件來源會以event
的形式作為輸入參數傳遞給函數,您可以使用代碼解析event參數,並對event進行處理。您可以手動將event
傳給函數類比觸發事件,測試函數代碼是否正確。
在函數詳情頁面的代碼頁簽,單擊測試函數右側的表徵圖,從下拉式清單中,選擇配置測試參數。
在配置測試參數面板,選擇建立新測試事件或編輯已有測試事件,填寫事件名稱和事件內容,然後單擊確定。
event
格式如下所示。[ { "id":"c2g71017-6f65-fhcf-a814-a396fc8d****", "source":"MNS-Function-mnstrigger", "specversion":"1.0", "type":"mns:Queue:SendMessage", "datacontenttype":"application/json; charset=utf-8", "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus", "time":"2021-04-08T06:28:17.093Z", "aliyunaccountid":"164901546557****", "aliyunpublishtime":"2021-10-15T07:06:34.028Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"MNS-Function-mnstrigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "requestId":"606EA3074344430D4C81****", "messageId":"C6DB60D1574661357FA227277445****", "messageBody":"TEST" } }, { "id":"d2g71017-6f65-fhcf-a814-a396fc8d****", "source":"MNS-Function-mnstrigger", "specversion":"1.0", "type":"mns:Queue:SendMessage", "datacontenttype":"application/json; charset=utf-8", "subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus", "time":"2021-04-08T06:28:17.093Z", "aliyunaccountid":"164901546557****", "aliyunpublishtime":"2021-10-15T07:06:34.028Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"MNS-Function-mnstrigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "requestId":"606EA3074344430D4C81****", "messageId":"C6DB60D1574661357FA227277445****", "messageBody":"TEST" } } ]
data欄位包含的參數解釋如下表所示。關於CloudEvents規範中定義的參數解釋,請參見事件概述。
參數 類型 樣本值 描述 requestId String 606EA3074344430D4C81**** 請求ID。每個請求的ID取值唯一。 messageId String C6DB60D1574661357FA227277445**** 訊息ID。每條訊息的ID取值唯一。 messageBody String TEST 訊息內容。
步驟三:編寫函數代碼並測試
完成觸發器建立後,您可以開始編寫並測試函數代碼,以驗證代碼的正確性。在實際操作過程中,當Simple Message Queue (formerly MNS)自訂事件來源產生的事件通過事件匯流排EventBridge投遞到Function Compute時,觸發器會自動觸發函數的執行。
在函數詳情頁面的代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼。
本文以Node.js函數代碼為例。
'use strict'; /* To enable the initializer feature please implement the initializer function as below: exports.initializer = (context, callback) => { console.log('initializing'); callback(null, ''); }; */ exports.handler = (event, context, callback) => { console.log("event: %s", event); //解析event參數,對event進行處理。 callback(null, 'return result'); }
測試函數。
方式一:如果您是配置函數入口參數
event
類比事件來源,單擊測試函數。方式二:登入輕量訊息佇列(原 MNS)控制台,選擇您建立的目標隊列,點擊發送訊息,如下圖。
執行完成後,在即時日誌查看結果。
更多資訊
如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。