定时任务触发器用于定时执行一个函数。定时有两种方式,时间间隔(every)和 cron 格式。
:::info 温馨提醒,测试函数后请及时关闭触发器自动执行,避免超额扣费。 :::
使用方式
在 f.yml
中配置函数和触发器。
service:
name: midway-faas-examples
provider:
name: aliyun
functions:
everyTimerTrigger: # 第一个函数,测试 every
handler: every.handler
events:
- timer:
type: every
value: 1m # 每隔一分钟
payload: 'awesome-fc'
cronTimerTrigger: # 第二个函数,测试 cron 表达式
handler: cron.handler
events:
- timer:
type: cron
value: '0 0 4 * * *' # 每天4:00触发 https://help.aliyun.com/document_detail/68172.html
payload: '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
获取触发器类型传入模拟数据。
// test
describe('/test/index.test.ts', () => {
it('invoke', async () => {
await invoke({
functionName: 'everyTimerTrigger',
});
});
});