Simple Message Queue (formerly MNS)的主題(Topic)可以作為事件來源通過事件匯流排EventBridge與Function 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主題觸發器
登入Function Compute控制台,在左側導覽列,單擊服務及函數。
- 在頂部功能表列,選擇地區,然後在服務列表頁面,單擊目標服務操作列的函數管理。
在函數管理頁面,單擊目標函數名稱。
在函數詳情頁面,單擊觸發器管理頁簽,從版本或別名下拉式清單選擇要建立觸發器的版本或別名,然後單擊建立觸發器。
在建立觸發器面板,填寫相關資訊。然後單擊確定。
參數
操作
本文樣本
觸發器類型
選擇輕量訊息佇列(原 MNS) topic 觸發 。
輕量訊息佇列(原 MNS) topic觸發
名稱
填寫自訂的觸發器名稱。
trigger-mns
版本或別名
預設值為LATEST,如果您需要建立其他版本或別名的觸發器,需先在函數詳情頁的右上方切換到該版本或別名。關於版本和別名的簡介,請參見管理版本和管理別名。
LATEST
MNS地區
選擇Topic所在的地區。輕量訊息佇列(原 MNS)主題和Function Compute的函數要部署在相同的地區。
西南1(成都)
主題
在列表中選擇已建立的Topic。
Mytopic
過濾標籤
填寫訊息過濾標籤。
只有收到包含了此處設定的過濾標籤字串的訊息時,才會觸發函數執行。
tag
Event格式
選擇Event格式。取值:
STREAM
JSON
JSON
重試策略
選擇重試策略。取值:
退避重試
指數衰減
如何選擇重試策略,請參見NotifyStrategy。
退避重試
角色名稱
選擇AliyunMNSNotificationRole。
說明如果您第一次建立該類型的觸發器,則需要在單擊確定後,在彈出的對話方塊中選擇立即授權。
AliyunMNSNotificationRole
建立完成後,在觸發器名稱列表中顯示已建立的觸發器。如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。
步驟二:配置函數的入口參數
在函數詳情頁面,單擊函數代碼頁簽,然後單擊測試函數右側表徵圖,從下拉式清單中,選擇配置測試參數。
在配置測試參數面板,選擇建立新測試事件或編輯已有測試事件頁簽,填寫事件名稱和事件內容。然後單擊確定。
發布在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)主題觸發器後,您可以開始編寫函數代碼並測試,以驗證代碼的正確性。
在函數詳情頁面,單擊函數代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼。
本文以Python函數代碼為例。以下範例程式碼可以作為輕量訊息佇列(原 MNS)主題觸發器的函數模板。
import json import logging def handler(event, context): logger = logging.getLogger() logger.info("mns_topic trigger event = {}".format(event)) # 例如,將事件記錄到Table Store。 return "OK"
單擊函數代碼頁簽的測試函數。
執行完成後,您可以在函數代碼頁簽的上方查看執行結果。
更多資訊
除了Function Compute控制台,您還可通過以下方式配置觸發器:
通過Serverless Devs工具配置觸發器。更多操作,請參見Serverless Devs。
通過SDK配置觸發器。更多操作,請參見SDK列表。
如需對建立的觸發器進行修改或刪除,具體操作,請參見觸發器管理。