定时任务触发器用于定时执行一个函数。定时有两种方式,时间间隔(every)和 cron 格式。

:::info 温馨提醒,测试函数后请及时关闭触发器自动执行,避免超额扣费。 :::

使用方式

f.yml 中配置函数和触发器。

  1. service:
  2. name: midway-faas-examples
  3. provider:
  4. name: aliyun
  5. functions:
  6. everyTimerTrigger: # 第一个函数,测试 every
  7. handler: every.handler
  8. events:
  9. - timer:
  10. type: every
  11. value: 1m # 每隔一分钟
  12. payload: 'awesome-fc'
  13. cronTimerTrigger: # 第二个函数,测试 cron 表达式
  14. handler: cron.handler
  15. events:
  16. - timer:
  17. type: cron
  18. value: '0 0 4 * * *' # 每天4:00触发 https://help.aliyun.com/document_detail/68172.html
  19. payload: 'awesome-fc'
  20. package:
  21. artifact: code.zip

f deploy 后,即可。

开发支持

针对 Timer 触发器,我们提供了传入的事件类型定义。

  1. import { FaaSContext, FC } from '@midwayjs/faas';
  2. import { Func, Inject, Provide } from '@midwayjs/decorator';
  3. @Provide()
  4. export class TimerTriggerTest {
  5. @Inject()
  6. ctx: FaaSContext; // context
  7. @Func('every.handler')
  8. async everyHandler(event: FC.TimerEvent) {
  9. // TODO
  10. }
  11. @Func('cron.handler')
  12. async cronHandler(event: FC.TimerEvent) {
  13. // TODO
  14. }
  15. }

本地开发

使用 f invoke 命令进行触发。

  1. f invoke -f [你的函数名]

本地测试

这里没有传 data,会默认通过 f.yml 获取触发器类型传入模拟数据。

  1. // test
  2. describe('/test/index.test.ts', () => {
  3. it('invoke', async () => {
  4. await invoke({
  5. functionName: 'everyTimerTrigger',
  6. });
  7. });
  8. });