雲訊息佇列 RabbitMQ 版作為事件來源通過事件匯流排EventBridge與Function Compute整合後,通過雲訊息佇列 RabbitMQ 版觸發器(以下簡稱RabbitMQ觸發器)能夠觸發關聯函數執行,通過函數可以對發布到雲訊息佇列 RabbitMQ 版中的訊息進行自訂處理。本文介紹如何在Function Compute控制台建立RabbitMQ觸發器、配置函數入口參數和編寫代碼並測試。
功能簡介
注意事項
- 作為觸發源的雲訊息佇列 RabbitMQ 版執行個體必須和Function Compute的函數在相同的地區。
- 建立的自訂匯流排以及事件規則的數量超過上限後,將無法再建立事件模式的RabbitMQ觸發器。
- 建立的事件流數量超過上限後,將無法再建立事件流模式的RabbitMQ觸發器。
在單個阿里雲帳號單個地區維度下,關於建立觸發器涉及的資源數量的限制,請參見使用限制。
前提條件
- 事件匯流排EventBridge
- Function Compute
- 雲訊息佇列 RabbitMQ 版
步驟一:建立觸發器
- 登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務。
在函數管理頁面,單擊目標函數名稱。
在函數詳情頁面,單擊觸發器管理頁簽,從版本或別名下拉式清單選擇要建立觸發器的版本或別名,然後單擊建立觸發器。
- 在建立觸發程序面板,填寫相關資訊。然後單擊確定。基礎配置項說明如下所示。
配置項 操作 本文樣本 觸發器類型 選擇訊息佇列 RabbitMQ 版。 訊息佇列 RabbitMQ 版 名稱 填寫自訂的觸發器名稱。 rabbitmq-trigger 版本或別名 預設值為LATEST,如果您需要建立其他版本或別名的觸發器,首先需要在函數詳情頁的右上方切換到該版本或別名。關於版本和別名的簡介,請參見管理版本和管理別名。 LATEST RabbitMQ 執行個體 選擇已建立的雲訊息佇列 RabbitMQ 版的執行個體。 amqp-cn-i7m2l6m2**** Vhost 選擇已建立的雲訊息佇列 RabbitMQ 版執行個體的Vhost。 myhost-1 Queue 選擇已建立的雲訊息佇列 RabbitMQ 版執行個體的Queue。 myqueue-1 調用方式 選擇函數調用方式。 同步調用 訊息推送模式 訊息資料推送到Function Compute時的底層應用模式。 取值說明如下。- 事件模式:每次會將單個訊息作為事件參數傳入函數中,事件遵循CloudEvents規範。訊息內容和CloudEvents的關係,請參見參數內容。
- 事件流模式:會根據您的攢批配置將一個或多個訊息事件以批的形式推送到函數中進行處理,適合端到端的流式資料處理情境。
事件模式 觸發器啟用狀態 建立觸發器後是否立即啟用。預設勾選啟用觸發器,即建立觸發器後立即啟用觸發器。 不涉及 關於推送配置、重試和死信等進階配置項說明,請參見觸發器進階功能。
建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。
步驟二:配置函數入口參數
雲訊息佇列 RabbitMQ 版事件來源會以event
的形式作為輸入參數傳遞給函數,您可以手動將event
傳給函數類比觸發事件,測試函數代碼是否正確。
- 在函數詳情頁面,單擊函數代碼頁簽,然後單擊測試函數右側表徵圖,從下拉式清單中,選擇配置測試參數。
- 在配置測試參數面板,選擇建立新測試事件或編輯已有測試事件頁簽,填寫事件名稱和事件內容。然後單擊確定。事件模式的
event
格式如下所示。{ "id":"bj694332-4cj1-389e-9d8c-b137h30b****", "source":"RabbitMQ-Function-rabbitmq-trigger", "specversion":"1.0", "type":"amqp:Queue:SendMessage", "datacontenttype":"application/json;charset=utf-8", "subject":"acs:amqp:cn-hangzhou:164901546557****:/instances/amqp-cn-tl32e756****/vhosts/eb-connect/queues/housekeeping", "time":"2021-08-12T06:56:40.709Z", "aliyunaccountid":"164901546557****", "aliyunpublishtime":"2021-10-15T08:58:55.140Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"RabbitMQ-Function-rabbitmq-trigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "envelope":{ "deliveryTag":98, "exchange":"", "redeliver":false, "routingKey":"housekeeping" }, "body":{ "Hello":"RabbitMQ" }, "props":{ "contentEncoding":"UTF-8", "messageId":"f7622d51-e198-41de-a072-77c1ead7****" } } }
事件流模式的event
格式如下所示。[ { "id":"bj694332-4cj1-389e-9d8c-b137h30b****", "source":"RabbitMQ-Function-rabbitmq-trigger", "specversion":"1.0", "type":"amqp:Queue:SendMessage", "datacontenttype":"application/json;charset=utf-8", "subject":"acs:amqp:cn-hangzhou:164901546557****:/instances/amqp-cn-tl32e756****/vhosts/eb-connect/queues/housekeeping", "time":"2021-08-12T06:56:40.709Z", "aliyunaccountid":"164901546557****", "aliyunpublishtime":"2021-10-15T08:58:55.140Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"RabbitMQ-Function-rabbitmq-trigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "envelope":{ "deliveryTag":98, "exchange":"", "redeliver":false, "routingKey":"housekeeping" }, "body":{ "Hello":"RabbitMQ" }, "props":{ "contentEncoding":"UTF-8", "messageId":"f7622d51-e198-41de-a072-77c1ead7****" } } }, { "id":"bj694332-4cj1-389e-9d8c-b137h30b****", "source":"RabbitMQ-Function-rabbitmq-trigger", "specversion":"1.0", "type":"amqp:Queue:SendMessage", "datacontenttype":"application/json;charset=utf-8", "subject":"acs:amqp:cn-hangzhou:164901546557****:/instances/amqp-cn-tl32e756****/vhosts/eb-connect/queues/housekeeping", "time":"2021-08-12T06:56:40.709Z", "aliyunaccountid":"164901546557****", "aliyunpublishtime":"2021-10-15T08:58:55.140Z", "aliyunoriginalaccountid":"164901546557****", "aliyuneventbusname":"RabbitMQ-Function-rabbitmq-trigger", "aliyunregionid":"cn-chengdu", "aliyunpublishaddr":"42.120.XX.XX", "data":{ "envelope":{ "deliveryTag":98, "exchange":"", "redeliver":false, "routingKey":"housekeeping" }, "body":{ "Hello":"RabbitMQ" }, "props":{ "contentEncoding":"UTF-8", "messageId":"f7622d51-e198-41de-a072-77c1ead7****" } } } ]
data欄位包含的參數解釋如下表所示。關於CloudEvents規範中定義的參數解釋,請參見事件概述。參數
類型
樣本值
描述
body
Map
訊息內容。
Hello
String
EventBridge
使用者資料。
props
Map
訊息屬性。
contentEncoding
String
utf-8
訊息內容編碼。
messageId
String
f7622d51-e198-41de-a072-77c1ead7****
訊息ID。每條訊息的ID取值唯一。
envelope
Map
訊息的envelope資訊。
deliveryTag
Int
98
訊息的Tag。
exchange
String
無
訊息的Exchange。
redeliver
Boolean
false
是否支援重發訊息。取值說明如下:
true:支援
false:不支援
routingKey
String
housekeeping
訊息的路由規則。
步驟三:編寫函數代碼並測試
完成觸發器建立後,您可以開始編寫並測試函數代碼,以驗證代碼的正確性。在實際操作過程中,當雲訊息佇列 RabbitMQ 版事件通過事件匯流排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'); }
單擊函數代碼頁簽的測試函數。
執行完成後,您可以在函數字碼頁簽的上方查看執行結果。
更多資訊
如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。