消息隊列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ù)計算的控制臺提交觸發(fā)器創(chuàng)建請求之后,函數(shù)計算會根據(jù)觸發(fā)器的配置信息,自動創(chuàng)建與事件總線EventBridge相關(guān)的資源。目前提供事件模式事件流模式兩種消息推送模式,每個模式創(chuàng)建的資源如下:
創(chuàng)建完成后,您可以在函數(shù)計算控制臺查看觸發(fā)器信息,同時也可以在事件總線EventBridge控制臺查看自動創(chuàng)建的資源信息。當(dāng)源消息隊列RabbitMQ版實例中有消息入隊時,將會觸發(fā)函數(shù)計算執(zhí)行,不同消息推送模式支持的參數(shù)內(nèi)容也不同。
  • 事件模式:每次會將單個消息作為事件參數(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ù)量的限制,請參見使用限制

前提條件

步驟一:創(chuàng)建觸發(fā)器

  1. 登錄函數(shù)計算控制臺,在左側(cè)導(dǎo)航欄,單擊服務(wù)及函數(shù)
  2. 在頂部菜單欄,選擇地域,然后在服務(wù)列表頁面,單擊目標(biāo)服務(wù)。
  3. 函數(shù)管理頁面,單擊目標(biāo)函數(shù)名稱。
  4. 在函數(shù)詳情頁面,單擊觸發(fā)器管理頁簽,從版本或別名下拉列表選擇要創(chuàng)建觸發(fā)器的版本或別名,然后單擊創(chuàng)建觸發(fā)器
  5. 在創(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ù)代碼是否正確。

  1. 在函數(shù)詳情頁面,單擊函數(shù)代碼頁簽,然后單擊xialatubiao圖標(biāo),從下拉列表中,選擇配置測試參數(shù)
  2. 配置測試參數(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ù)類型示例值描述
    bodyMap消息內(nèi)容。
    HelloStringEventBridge用戶數(shù)據(jù)。
    propsMap消息屬性。
    contentEncodingStringutf-8消息內(nèi)容編碼。
    messageIdStringf7622d51-e198-41de-a072-77c1ead7****消息ID。每條消息的ID取值唯一。
    envelopeMap消息的envelope信息。
    deliveryTagInt98消息的Tag。
    exchangeString消息的Exchange。
    redeliverBooleanfalse是否支持重發(fā)消息。取值說明如下:
    • true:支持
    • false:不支持
    routingKeyStringhousekeeping消息的路由規(guī)則。

步驟三:編寫函數(shù)代碼并測試

完成觸發(fā)器創(chuàng)建后,您可以開始編寫并測試函數(shù)代碼,以驗證代碼的正確性。在實際操作過程中,當(dāng)消息隊列RabbitMQ版事件通過事件總線EventBridge投遞到函數(shù)計算時,觸發(fā)器會自動觸發(fā)函數(shù)的執(zhí)行。

  1. 在函數(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');
    }
  2. 單擊函數(shù)代碼頁簽的測試函數(shù)
    執(zhí)行完成后,您可以在函數(shù)代碼頁簽的上方查看執(zhí)行結(jié)果。

更多信息

如需對創(chuàng)建的觸發(fā)器進行修改或刪除,具體操作,請參見觸發(fā)器管理