日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

事件請(qǐng)求處理程序(Event Handler)

更新時(shí)間:

本文介紹Custom Container中事件請(qǐng)求處理程序的結(jié)構(gòu)特點(diǎn)、使用示例和常見問題等。

背景介紹

針對(duì)Web Server模式的Custom Container函數(shù),函數(shù)計(jì)算會(huì)將Common Headers、Body、POST方法以及/invoke/initialize路徑轉(zhuǎn)發(fā)給容器中的HTTP Server。您可以選擇實(shí)現(xiàn)類似官方支持的Runtime(例如Golang Runtime)的contextevent函數(shù)簽名。您也可以直接使用入?yún)⒄?qǐng)求頭(Headers)和請(qǐng)求體(Body)來編寫函數(shù)的業(yè)務(wù)邏輯。更多信息,請(qǐng)參見Custom Runtime事件函數(shù)調(diào)用

針對(duì)非Web Server模式的Custom Container函數(shù),函數(shù)計(jì)算會(huì)將Body通過環(huán)境變量的形式添加至容器啟動(dòng)環(huán)境中。您可以通過os.GetEnv("FC_CUSTOM_CONTAINER_EVENT")獲取事件信息并進(jìn)行任意處理。

函數(shù)調(diào)用說明

當(dāng)Web Server模式函數(shù)是事件請(qǐng)求處理程序時(shí),Http Server僅需實(shí)現(xiàn)Path為/invoke和Method為POST的對(duì)應(yīng)邏輯即可。

Path

輸入請(qǐng)求

預(yù)期響應(yīng)

POST /invoke

響應(yīng)體:函數(shù)Handler的返回值,包括響應(yīng)碼和響應(yīng)頭。

  • 響應(yīng)碼StatusCode
    • 200:成功狀態(tài)。
    • 404:失敗狀態(tài)。
  • 響應(yīng)頭x-fc-status
    • 200:成功狀態(tài)。
    • 404:失敗狀態(tài)。
通過Headers中的x-fc-status響應(yīng),向函數(shù)計(jì)算匯報(bào)本地函數(shù)是否執(zhí)行成功。
  • 不設(shè)置x-fc-status函數(shù)計(jì)算默認(rèn)本次調(diào)用是成功執(zhí)行的,但是您的函數(shù)可能有異常,沒有向函數(shù)計(jì)算匯報(bào),函數(shù)計(jì)算會(huì)認(rèn)為這次函數(shù)執(zhí)行沒有報(bào)錯(cuò),在業(yè)務(wù)邏輯上可能沒有影響,但是在監(jiān)控可觀測(cè)性上會(huì)有影響。如下圖所示:image8hanshujisuanruntime
  • 設(shè)置x-fc-status:當(dāng)您的函數(shù)存在異常,通過x-fc-status響應(yīng)向函數(shù)計(jì)算匯報(bào)本次函數(shù)執(zhí)行失敗,并將錯(cuò)誤堆棧信息打印到日志中。如下圖所示:image9runtimefc
說明 在返回的HTTP響應(yīng)中,建議您同時(shí)設(shè)置StatusCodex-fc-status

Web Server模式代碼示例

在以下Node.js Express示例中,POST方法和/initialize路徑會(huì)在函數(shù)實(shí)例初始化時(shí)被函數(shù)計(jì)算調(diào)用,POST方法和/invoke路徑為函數(shù)計(jì)算被調(diào)用時(shí)的Handler,通過req.headers以及req.body獲取contextevent并將函數(shù)返回結(jié)果通過HTTP Response結(jié)構(gòu)體輸出。

'use strict';

const express = require('express');

// 常量
const PORT = 9000;
const HOST = '0.0.0.0';
const app = express();
// 解析JSON格式的請(qǐng)求體
app.use(express.json({type:['application/json', 'application/octet-stream']}))


// 初始化回調(diào)示例,需要在函數(shù)配置中配置初始化回調(diào)
app.post('/initialize', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, /initialize\n');
});


// 事件函數(shù)調(diào)用
app.post('/invoke', (req, res) => {
  console.log(req.body)
  res.send('Hello FunctionCompute, event function\n');
});

var server = app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

server.timeout = 0; // 設(shè)置從不超時(shí)
server.keepAliveTimeout = 0; // keepalive, never timeout

非Web Server模式代碼示例

在以下Python鏡像示例中,通過FC_CUSTOM_CONTAINER_EVENT獲取事件觸發(fā)的內(nèi)容。

import os

if __name__ == '__main__':
    FC_EVENT = os.environ['FC_CUSTOM_CONTAINER_EVENT']
    print("Hello serverless image")
    print("FC event is: " + FC_EVENT)

多語言使用示例

使用Serverless Devs工具,您可以將您的應(yīng)用一鍵遷移至函數(shù)計(jì)算。以下示例展示如何通過Serverless Devs工具快速部署和調(diào)用函數(shù),您可以按需修改示例代碼,實(shí)現(xiàn)二次開發(fā)。

常見問題