觸發(fā)器高級(jí)功能
本文介紹觸發(fā)器的高級(jí)系統(tǒng)功能。
使用說明
本文介紹的高級(jí)功能只適用于自定義事件源觸發(fā)器,包括輕量消息隊(duì)列(原 MNS)隊(duì)列觸發(fā)器、RocketMQ觸發(fā)器、RabbitMQ觸發(fā)器、Kafka觸發(fā)器和DTS觸發(fā)器。
調(diào)用方式
函數(shù)計(jì)算的觸發(fā)器支持同步調(diào)用和異步調(diào)用兩種調(diào)用方式。兩種調(diào)用方式的限制如下所示。
調(diào)用模式 |
| 超時(shí)時(shí)間上限 |
同步調(diào)用 | 32 MB | 5分鐘 |
異步調(diào)用 | 128 KB | 5分鐘 |
推送配置
批量推送需結(jié)合body
大小限制決定是否減少聚合消息數(shù)。關(guān)于body
大小限制,請(qǐng)參見調(diào)用方式。
批量推送
開啟批量推送后,需設(shè)置批量推送條數(shù)和推量推送間隔。
批量推送條數(shù):一次調(diào)用函數(shù)發(fā)送的最大批量消息條數(shù),當(dāng)積壓的消息數(shù)量到達(dá)設(shè)定值時(shí)才會(huì)發(fā)送請(qǐng)求。取值范圍為[1,10000]。
推量推送間隔:調(diào)用函數(shù)的時(shí)間間隔,系統(tǒng)每到間隔時(shí)間點(diǎn)會(huì)將消息聚合后發(fā)給函數(shù)計(jì)算。取值范圍為[0,15],單位為秒。0秒表示無需等待,實(shí)時(shí)投遞。
批量推送幫助您批量聚合多個(gè)事件,當(dāng)批量推送條數(shù)和推量推送間隔兩者條件滿足其中一個(gè)時(shí),觸發(fā)函數(shù)執(zhí)行,將請(qǐng)求消息批量推送到函數(shù)計(jì)算。
批量推送案例
案例一
您設(shè)置的批量推送條數(shù)為100條,每條消息大小為1 KB,推量推送間隔為15s。在10s內(nèi)消息條數(shù)累積100條,則立即觸發(fā)推送,無需等到15s再推送。
案例二
您設(shè)置的批量推送條數(shù)為100條,每條消息大小為1 KB,推量推送間隔為15s。在15s內(nèi)消息積累50條,則立即觸發(fā)推送,無需等待消息積累到100條后再推送。
案例三
您設(shè)置的批量推送條數(shù)為100條,每條消息大小為2 KB,推量推送間隔為15s,調(diào)用方式為異步調(diào)用。在10s內(nèi)消息積累100條(消息累積大小100*2KB=200KB),達(dá)到異步調(diào)用
body
大小限制數(shù),則立即觸發(fā)推送,第一批聚合64條消息推送到函數(shù)計(jì)算,第二批聚合36條消息推送到函數(shù)計(jì)算。
推送格式
用于指定函數(shù)入口參數(shù)Event中每個(gè)數(shù)據(jù)元素的格式。
CloudEvents:以通用格式描述事件數(shù)據(jù)的規(guī)范,旨在簡(jiǎn)化不同服務(wù)和平臺(tái)間的事件聲明和傳輸。
RawData:只投遞CloudEvents中數(shù)據(jù)字段的內(nèi)容,不包含CloudEvents格式中的其它元數(shù)據(jù)信息。
以輕量消息隊(duì)列(原 MNS)隊(duì)列觸發(fā)器為例,CloudEvents和RawData類型的Event格式如下。
CloudEvents
[
{
"id":"c2g71017-6f65-fhcf-a814-a396fc8d****",
"source":"MNS-Function-mnstrigger",
"specversion":"1.0",
"type":"mns:Queue:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
"time":"2021-04-08T06:28:17.093Z",
"aliyunaccountid":"164901546557****",
"aliyunpublishtime":"2021-10-15T07:06:34.028Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"MNS-Function-mnstrigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"requestId":"606EA3074344430D4C81****",
"messageId":"C6DB60D1574661357FA227277445****",
"messageBody":"TEST"
}
},
{
"id":"d2g71017-6f65-fhcf-a814-a396fc8d****",
"source":"MNS-Function-mnstrigger",
"specversion":"1.0",
"type":"mns:Queue:SendMessage",
"datacontenttype":"application/json; charset=utf-8",
"subject":"acs:mns:cn-hangzhou:164901546557****:queues/zeus",
"time":"2021-04-08T06:28:17.093Z",
"aliyunaccountid":"164901546557****",
"aliyunpublishtime":"2021-10-15T07:06:34.028Z",
"aliyunoriginalaccountid":"164901546557****",
"aliyuneventbusname":"MNS-Function-mnstrigger",
"aliyunregionid":"cn-chengdu",
"aliyunpublishaddr":"42.120.XX.XX",
"data":{
"requestId":"606EA3074344430D4C81****",
"messageId":"C6DB60D1574661357FA227277445****",
"messageBody":"TEST"
}
}
]
RawData
[
{
"requestId":"606EA3074344430D4C81****",
"messageId":"C6DB60D1574661357FA227277445****",
"messageBody":"TEST"
},
{
"requestId":"606EA3074344430D4C81****",
"messageId":"C6DB60D1574661357FA227277445****",
"messageBody":"TEST"
}
]
重試策略
函數(shù)請(qǐng)求在部分失敗場(chǎng)景下,可按配置的重試策略進(jìn)行重試。重試策略選項(xiàng)如下。
退避重試:重試3次,每次重試的時(shí)間間隔為介于10s~20s的隨機(jī)值。
指數(shù)衰減重試:默認(rèn)重試策略。重試176次,每次重試的時(shí)間間隔按照指數(shù)遞增至512s,總計(jì)重試時(shí)間為24小時(shí),即重試時(shí)間間隔為1s、2s、4s、8s、16s、32s、64s、128s、256s、512s……512s(共計(jì)167次間隔512s)。
觸發(fā)重試的場(chǎng)景
429
錯(cuò)誤:指請(qǐng)求被函數(shù)計(jì)算限流。限流是短暫的,因此會(huì)觸發(fā)重試。5xx
錯(cuò)誤:指函數(shù)計(jì)算系統(tǒng)異常導(dǎo)致函數(shù)無法執(zhí)行。
常見問題FAQ
Q:因函數(shù)實(shí)現(xiàn)問題引發(fā)的函數(shù)執(zhí)行出錯(cuò)是否會(huì)觸發(fā)執(zhí)行重試策略?
A:同步調(diào)用方式,函數(shù)實(shí)現(xiàn)問題會(huì)觸發(fā)重試策略。異步調(diào)用方式,函數(shù)實(shí)現(xiàn)問題不會(huì)觸發(fā)重試策略,但是會(huì)觸發(fā)異步調(diào)用重試策略。更多信息,請(qǐng)參見重試策略。
函數(shù)運(yùn)行出錯(cuò)重試包含以下兩種類型。
可能重試成功
無需執(zhí)行重試策略,可以在函數(shù)內(nèi)實(shí)現(xiàn)重試。
不可能重試成功
重試無意義,只會(huì)增加重試成本。
容錯(cuò)策略
當(dāng)發(fā)生錯(cuò)誤時(shí)是否選擇容錯(cuò)。
允許容錯(cuò)
請(qǐng)求失敗且重試失敗后,跳過此請(qǐng)求,繼續(xù)處理下一條請(qǐng)求。
禁止容錯(cuò)
請(qǐng)求失敗且重試失敗后,消費(fèi)任務(wù)阻塞。
死信隊(duì)列
僅當(dāng)開啟允許容錯(cuò)時(shí),可配置死信隊(duì)列。
如果啟用死信隊(duì)列,未被處理或超過重試次數(shù)的消息會(huì)被投遞到目標(biāo)服務(wù)中。函數(shù)計(jì)算支持的目標(biāo)服務(wù)包括輕量消息隊(duì)列(原 MNS)、云消息隊(duì)列 RocketMQ版、云消息隊(duì)列 Kafka 版、事件總線EventBridge,您可以根據(jù)需求選擇不同的隊(duì)列類型。
如果未啟用死信隊(duì)列,超過重試次數(shù)的消息會(huì)被丟棄。
異步調(diào)用場(chǎng)景下,函數(shù)出現(xiàn)錯(cuò)誤時(shí),消息不會(huì)被投遞到觸發(fā)器的死信隊(duì)列中,而是被投遞到函數(shù)計(jì)算側(cè)配置的異步調(diào)用目標(biāo)服務(wù)。更多信息,請(qǐng)參見結(jié)果回調(diào)。