全部產品
Search
文件中心

Function Compute:輕量訊息佇列(原 MNS)主題觸發器

更新時間:Oct 25, 2024

Simple Message Queue (formerly MNS)的主題(Topic)可以作為事件來源通過事件匯流排EventBridgeFunction Compute進行整合。通過Simple Message Queue (formerly MNS)主題觸發器,當有新訊息發送到您的Simple Message Queue (formerly MNS)主題時,它會自動觸發與之關聯的函數執行,從而您可以輕鬆地對傳入的訊息進行自訂處理。

背景介紹

輕量訊息佇列(原 MNS)是一種高效、可靠、安全、便捷、可彈性擴充的分布式Message Service。協助應用開發人員在其應用的分布式組件上自由地傳遞資料、通知訊息,構建松耦合系統。在輕量訊息佇列(原 MNS)中,主題是發布訊息的目的地。發行者可以通過PublishMessage介面向主題發布訊息,主題的訂閱者接收該訊息。介面資訊,請參見PublishMessage

配置一個Simple Message Queue (formerly MNS)主題觸發器,相當於將函數註冊為這個Simple Message Queue (formerly MNS)主題的訂閱者,當發行者向Simple Message Queue (formerly MNS)主題發布訊息的時候,就會把訊息內容通知給函數,即觸發函數執行,同時訊息內容作為函數入口的event參數。具體資訊,請參見基礎資訊

輕量訊息佇列(原 MNS)與Function Compute整合有以下優勢:

  • 可以實現對訊息進行一些高階處理再發送郵件或者簡訊。

  • HTTP Endpoint不需要有自建的服務。

  • 支援豐富的自訂處理。例如,把訊息發送給slack,或者對於特定的訊息進行持久化儲存。

前提條件

注意事項

  • 輕量訊息佇列(原 MNS)建立的主題和Function Compute的函數部署在相同的地區。

  • 避免出現迴圈調用的情況。

    編寫函數時,注意不要出現以下邏輯:Topic A觸發函數B,函數B又發布新的訊息到Topic A,從而造成函數無限迴圈調用。

步驟一:建立輕量訊息佇列(原 MNS)主題觸發器

  1. 登入Function Compute控制台,在左側導覽列,單擊函數

  2. 在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。

  3. 在函數詳情頁面,選擇配置頁簽,在左側導覽列,單擊觸發器,然後單擊建立觸發器

  4. 在建立觸發程序面板,填寫相關資訊,然後單擊確定

    參數

    操作

    本文樣本

    觸發器類型

    選擇輕量訊息佇列(原 MNS) topic 觸發

    Simple Message Queue (formerly MNS) topic觸發

    名稱

    填寫自訂的觸發器名稱。

    trigger-mns

    版本或別名

    預設值為LATEST,如果您需要建立其他版本或別名的觸發器,需先在函數詳情頁的右上方切換到該版本或別名。關於版本和別名的簡介,請參見版本管理別名管理

    LATEST

    輕量訊息佇列(原 MNS) 地區

    選擇Topic所在的地區。Simple Message Queue (formerly MNS)主題和Function Compute的函數要部署在相同的地區。

    西南1(成都)

    主題

    在列表中選擇已建立的Topic。

    Mytopic

    過濾標籤

    填寫訊息過濾標籤。

    只有收到包含了此處設定的過濾標籤字串的訊息時,才會觸發函數執行。

    tag

    Event 格式

    選擇Event格式。取值:

    • STREAM

    • JSON

    JSON

    重試策略

    選擇重試策略。取值:

    • 退避重試

    • 指數衰減

    如何選擇重試策略,請參見NotifyStrategy

    退避重試

    角色名稱

    選擇AliyunMNSNotificationRole

    說明

    如果您第一次建立該類型的觸發器,則需要在單擊確定後,在彈出的對話方塊中選擇立即授權

    AliyunMNSNotificationRole

步驟二:配置函數的入口參數

  1. 在函數詳情頁面的代碼頁簽,單擊測試函數右側的image.png表徵圖,從下拉式清單中,選擇配置測試參數

  2. 配置測試參數面板,選擇建立新測試事件編輯已有測試事件,填寫事件名稱和事件內容,然後單擊確定。

    發布在Simple Message Queue (formerly MNS)主題上的訊息根據notifyContentFormat進行處理,即入口函數的event。更多資訊,請參見NotifyContentFormat

    • 建立觸發器時,若event格式設定為STREAM

      • 當訊息中不含訊息屬性(MessageAttributes)時,event格式如下。

        說明

        當訊息中不含訊息屬性(MessageAttributes)時,event的內容格式為JSON字串。

        # 訊息本文。
        'hello topic'
      • 當訊息中含有訊息屬性(MessageAttributes)時,event格式如下。

        說明

        event的內容中包含MessageAttributes相關的索引值對。更多資訊,請參見PublishMessage

            {
                "body": "hello topic",
                "attrs": {
                    "Extend": "{\\"key\\":\\"value\\"}"
                }
            }                    
    • 建立觸發器時,若event格式設定為JSON

      • 當訊息中不含訊息屬性(MessageAttributes)時,event格式如下。

            {
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216480040,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C082B923D4EAC694B76D928****"
            }        
                                    
      • 當訊息中含有訊息屬性(MessageAttributes)時,event格式如下。

        說明

        event的內容中包含MessageAttributes相關的索引值對。更多資訊,請參見PublishMessage

            {
                "key": "value",
                "TopicOwner": "118620210433****",
                "Message": "hello topic",
                "Subscriber": "118620210433****",
                "PublishTime": 1550216302888,
                "SubscriptionName": "test-fc-subscribe",
                "MessageMD5": "BA4BA9B48AC81F0F9C66F6C909C3****",
                "TopicName": "Mytopic",
                "MessageId": "2F5B3C281B283D4EAC694B742528****"
            }
                                    

    event參數中不同屬性欄位的解釋如下表所示。

    參數

    類型

    樣本值

    描述

    key

    String

    value

    訊息屬性相關的索引值對。

    TopicOwner

    String

    118620210433****

    訂閱Topic的AccountId。

    Message

    String

    hello topic

    訊息內容。

    Subscriber

    String

    118620210433****

    使用者的AccountId。

    PublishTime

    Int

    1550216302888

    訊息發布時間。

    SubscriptionName

    String

    test-fc-subscribe

    訂閱的名稱。

    MessageMD5

    String

    BA4BA9B48AC81F0F9C66F6C909C3****

    訊息本文的MD5值。

    TopicName

    String

    Mytopic

    Topic名稱。

    MessageId

    String

    2F5B3C281B283D4EAC694B742528****

    訊息的編號。

步驟三:編寫函數代碼並測試

完成建立Simple Message Queue (formerly MNS)主題觸發器後,您可以開始編寫函數代碼並測試,以驗證代碼的正確性。

  1. 在函數詳情頁面的代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼

    本文以Python函數代碼為例。以下範例程式碼可以作為Simple Message Queue (formerly MNS)主題觸發器的函數模板。

    import json
    import logging
    
    def handler(event, context):
      logger = logging.getLogger()
      logger.info("mns_topic trigger event = {}".format(event))
      # 例如,將事件記錄到Table Store。
      return "OK"                     
  2. 單擊測試函數

    執行完成後,您可以在函數代碼頁簽的上方查看執行結果。

更多資訊

除了Function Compute控制台,您還可以通過以下方式配置觸發器:

如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理