定时任务触发器用于定时执行一个函数。定时有两种方式,时间间隔(every)和 cron 格式。
:::info 温馨提醒,测试函数后请及时关闭触发器自动执行,避免超额扣费。 :::
使用方式
在 f.yml 中配置函数和触发器。
service:name: midway-faas-examplesprovider:name: aliyunfunctions:everyTimerTrigger: # 第一个函数,测试 everyhandler: every.handlerevents:- timer:type: everyvalue: 1m # 每隔一分钟payload: 'awesome-fc'cronTimerTrigger: # 第二个函数,测试 cron 表达式handler: cron.handlerevents:- timer:type: cronvalue: '0 0 4 * * *' # 每天4:00触发 https://help.aliyun.com/document_detail/68172.htmlpayload: 'awesome-fc'package:artifact: code.zip
在 f deploy 后,即可。
开发支持
针对 Timer 触发器,我们提供了传入的事件类型定义。
import { FaaSContext, FC } from '@midwayjs/faas';import { Func, Inject, Provide } from '@midwayjs/decorator';@Provide()export class TimerTriggerTest {@Inject()ctx: FaaSContext; // context@Func('every.handler')async everyHandler(event: FC.TimerEvent) {// TODO}@Func('cron.handler')async cronHandler(event: FC.TimerEvent) {// TODO}}
本地开发
使用 f invoke 命令进行触发。
f invoke -f [你的函数名]
本地测试
这里没有传 data,会默认通过 f.yml 获取触发器类型传入模拟数据。
// testdescribe('/test/index.test.ts', () => {it('invoke', async () => {await invoke({functionName: 'everyTimerTrigger',});});});
