基于 dapr cron binding 实现定时任务
2022/8/16 23:27:33
本文主要是介绍基于 dapr cron binding 实现定时任务,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这两天在开发中的一个功能需要用到定时任务,正好最近准备更多使用 dapr,于是想到这个经常重复编写的代码看是否可以让 dapr 代劳,了解之后发现可以通过 cron binding 实现,动手之后轻松搞定,写博文记录一下(基于 kubernetes 部署环境)。
基于 dapr cron binding 实现定时任务的原理很简单,就是应用无需关心定时,只需暴露执行任务的 api 给 dapr sidecar 调用,定时交由 daprd 处理。
比如我们要实现每天早上9点进行文章导入的定时任务,首先在应用中暴露 api
[ApiController] [ApiVersionNeutral] public class ImportController : ControllerBase { [Route("import-articles")] public async Task<IActionResult> Articles() { //... } }
然后定义 dapr bindings.cron 组件清单
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: import-articles namespace: production spec: type: bindings.cron version: v1 metadata: - name: schedule value: '0 1 * * *' scopes: - brands-api
metadata.name
对应的是执行定时任务时所请求的应用的 api 路径scopes
用于限定所针对的应用,brands-api
就是在应用的 k8s deployment 中定义的dapr.io/app-id
value: '0 1 * * *'
中写的是标准的 cron 表达式,需要注意时区问题,0 1 * * *
表示北京时间每天早上9点。
如果想查看 cron binding 的调度日志,需要将 daprd 日志级别改为 debug,修改方法是在应用的 deployment 中添加 dapr.io/log-level: debug
spec: template: metadata: annotations: dapr.io/app-id: brands-api dapr.io/enabled: "true" dapr.io/log-level: debug
然后通过 kubectl logs 命令查看日志
kubectl logs --since 5m deploy/brands-api daprd
日志输出如下
time="2022-08-16T04:22:15.192224084Z" level=debug msg="name: import-articles, next run: 44.80779615s" app_id=brands-api instance=brands-api-84b4768b66-rb879 scope=dapr.contrib type=log ver=1.8.3 time="2022-08-16T04:23:00.001030337Z" level=debug msg="name: import-articles, schedule fired: 2022-08-16 04:23:00.000953098 +0000 UTC m=+50.266709169" app_id=brands-api instance=brands-api-84b4768b66-rb879 scope=dapr.contrib type=log ver=1.8.3
需要注意的地方:
- 修改 cron 表达式后需要重新部署对应的应用才能生效
- cron 表达式写错(写成不支持的格式)会造成 sidecar daprd 无法启动
这篇关于基于 dapr cron binding 实现定时任务的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01巧用 TiCDC Syncpoint 构建银行实时交易和准实时计算一体化架构
- 2024-05-01银行核心背后的落地工程体系丨Oracle - TiDB 数据迁移详解
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享