消息隊列RabbitMQ版作為事件源通過事件總線EventBridge與函數(shù)計算集成后,通過消息隊列RabbitMQ版觸發(fā)器(以下簡稱RabbitMQ觸發(fā)器)能夠觸發(fā)關(guān)聯(lián)函數(shù)執(zhí)行,通過函數(shù)可以對發(fā)布到消息隊列RabbitMQ版中的消息進行自定義處理。本文介紹如何在函數(shù)計算控制臺創(chuàng)建RabbitMQ觸發(fā)器、配置函數(shù)入口參數(shù)和編寫代碼并測試。
功能簡介
- 事件模式:每次會將單個消息作為事件參數(shù)傳入函數(shù)中,事件遵循CloudEvents規(guī)范。消息內(nèi)容和CloudEvents的關(guān)系,請參見參數(shù)內(nèi)容。
- 事件流模式:根據(jù)您的攢批配置,將一個或多個消息事件以批的形式推送到函數(shù)中進行處理,適合端到端的流式數(shù)據(jù)處理場景。
注意事項
- 作為觸發(fā)源的消息隊列RabbitMQ版實例必須和函數(shù)計算的函數(shù)在相同的地域。
- 創(chuàng)建的自定義總線以及事件規(guī)則的數(shù)量超過上限后,將無法再創(chuàng)建事件模式的RabbitMQ觸發(fā)器。
- 創(chuàng)建的事件流數(shù)量超過上限后,將無法再創(chuàng)建事件流模式的RabbitMQ觸發(fā)器。
在單個阿里云賬號單個地域維度下,關(guān)于創(chuàng)建觸發(fā)器涉及的資源數(shù)量的限制,請參見使用限制。
前提條件
- 事件總線EventBridge
- 函數(shù)計算
- 消息隊列RabbitMQ版
步驟一:創(chuàng)建觸發(fā)器
- 登錄函數(shù)計算控制臺,在左側(cè)導(dǎo)航欄,單擊服務(wù)及函數(shù)。
- 在頂部菜單欄,選擇地域,然后在服務(wù)列表頁面,單擊目標(biāo)服務(wù)。
- 在函數(shù)管理頁面,單擊目標(biāo)函數(shù)名稱。
- 在函數(shù)詳情頁面,單擊觸發(fā)器管理頁簽,從版本或別名下拉列表選擇要創(chuàng)建觸發(fā)器的版本或別名,然后單擊創(chuàng)建觸發(fā)器。
- 在創(chuàng)建觸發(fā)器面板,填寫相關(guān)信息。然后單擊確定。基礎(chǔ)配置項說明如下所示。
配置項 操作 本文示例 觸發(fā)器類型 選擇消息隊列 RabbitMQ 版。 消息隊列 RabbitMQ 版 名稱 填寫自定義的觸發(fā)器名稱。 rabbitmq-trigger 版本或別名 默認值為LATEST,如果您需要創(chuàng)建其他版本或別名的觸發(fā)器,首先需要在函數(shù)詳情頁的右上角切換到該版本或別名。關(guān)于版本和別名的簡介,請參見管理版本和管理別名。 LATEST RabbitMQ 實例 選擇已創(chuàng)建的消息隊列RabbitMQ版的實例。 amqp-cn-i7m2l6m2**** Vhost 選擇已創(chuàng)建的消息隊列RabbitMQ版實例的Vhost。 myhost-1 Queue 選擇已創(chuàng)建的消息隊列RabbitMQ版實例的Queue。 myqueue-1 調(diào)用方式 選擇函數(shù)調(diào)用方式。 取值說明如下。- 同步調(diào)用:適用于順序調(diào)用場景。單個(批)事件觸發(fā)函數(shù)調(diào)用,等待函數(shù)執(zhí)行完成返回結(jié)果后,再由下一個(批)事件繼續(xù)觸發(fā)函數(shù)調(diào)用。同步調(diào)用請求正文有效負載最大為32 MB。更多信息,請參見同步調(diào)用。
- 異步調(diào)用:可以快速消費事件。單個(批)事件觸發(fā)函數(shù)調(diào)用,函數(shù)計算會立刻返回響應(yīng),再由下一個(批)事件繼續(xù)觸發(fā)函數(shù)調(diào)用。該過程中函數(shù)會異步執(zhí)行。異步調(diào)用請求正文有效負載最大為128 KB。更多信息,請參見異步調(diào)用。
同步調(diào)用 消息推送模式 消息數(shù)據(jù)推送到函數(shù)計算時的底層應(yīng)用模式。 取值說明如下。- 事件模式:每次會將單個消息作為事件參數(shù)傳入函數(shù)中,事件遵循CloudEvents規(guī)范。消息內(nèi)容和CloudEvents的關(guān)系,請參見參數(shù)內(nèi)容。
- 事件流模式:會根據(jù)您的攢批配置將一個或多個消息事件以批的形式推送到函數(shù)中進行處理,適合端到端的流式數(shù)據(jù)處理場景。
事件模式 觸發(fā)器啟用狀態(tài) 創(chuàng)建觸發(fā)器后是否立即啟用。默認勾選啟用觸發(fā)器,即創(chuàng)建觸發(fā)器后立即啟用觸發(fā)器。 不涉及 關(guān)于推送配置、重試和死信等高級配置項說明,請參見觸發(fā)器高級功能。
創(chuàng)建完成后,在觸發(fā)器名稱列表中顯示已創(chuàng)建的觸發(fā)器。如需對創(chuàng)建的觸發(fā)器進行修改或刪除,具體操作,請參見觸發(fā)器管理。
步驟二:配置函數(shù)入口參數(shù)
消息隊列RabbitMQ版事件源會以event
的形式作為輸入?yún)?shù)傳遞給函數(shù),您可以手動將event
傳給函數(shù)模擬觸發(fā)事件,測試函數(shù)代碼是否正確。
- 在函數(shù)詳情頁面,單擊函數(shù)代碼頁簽,然后單擊圖標(biāo),從下拉列表中,選擇配置測試參數(shù)。
- 在配置測試參數(shù)面板,選擇創(chuàng)建新測試事件或編輯已有測試事件頁簽,填寫事件名稱和事件內(nèi)容。然后單擊確定。事件模式的
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字段包含的參數(shù)解釋如下表所示。關(guān)于CloudEvents規(guī)范中定義的參數(shù)解釋,請參見事件概述。參數(shù) 類型 示例值 描述 body Map 消息內(nèi)容。 Hello String EventBridge 用戶數(shù)據(jù)。 props Map 消息屬性。 contentEncoding String utf-8 消息內(nèi)容編碼。 messageId String f7622d51-e198-41de-a072-77c1ead7**** 消息ID。每條消息的ID取值唯一。 envelope Map 消息的envelope信息。 deliveryTag Int 98 消息的Tag。 exchange String 無 消息的Exchange。 redeliver Boolean false 是否支持重發(fā)消息。取值說明如下: - true:支持
- false:不支持
routingKey String housekeeping 消息的路由規(guī)則。
步驟三:編寫函數(shù)代碼并測試
完成觸發(fā)器創(chuàng)建后,您可以開始編寫并測試函數(shù)代碼,以驗證代碼的正確性。在實際操作過程中,當(dāng)消息隊列RabbitMQ版事件通過事件總線EventBridge投遞到函數(shù)計算時,觸發(fā)器會自動觸發(fā)函數(shù)的執(zhí)行。
- 在函數(shù)詳情頁面,單擊函數(shù)代碼頁簽,在代碼編輯器中編寫代碼,然后單擊部署代碼。本文以Node.js函數(shù)代碼為例。
'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參數(shù),對event進行處理。 callback(null, 'return result'); }
- 單擊函數(shù)代碼頁簽的測試函數(shù)。執(zhí)行完成后,您可以在函數(shù)代碼頁簽的上方查看執(zhí)行結(jié)果。
更多信息
如需對創(chuàng)建的觸發(fā)器進行修改或刪除,具體操作,請參見觸發(fā)器管理。