在 Dapr 中使用 Cron 绑定的计划任务
我昨天写了一篇关于在微服务应用程序中采用Dapr的好处的文章《从服务之间的调用来看 我们为什么需要Dapr》[1], 在那篇文章中,我们专注于"服务调用"构建块 [2]。在这篇文章中,我想向你展现一个特别有用的功能,它是由"绑定"构建块[3]实现的。
Dapr 绑定
Dapr 中的"绑定"概念对于任何使用过 Azure Functions 的人来说都很熟悉,它们揭示了与各种第三方服务交互的简化方式,可以说微软的技术都是一脉相承的,Dapr 就是毫不夸张的来说就是微软技术的集大成者。
绑定可以是"输入"或"输出"。输入绑定(也称为"触发器")允许 Dapr 订阅外部系统中的事件,并在服务上调用终结点,以便您知道发生了什么。Azure 中的良好示例是订阅事件网格上的事件[4]或服务总线[5]上的消息。但是有许多受支持的绑定,包括Twitter之类的东西,因此每当有符合您的搜索条件的推文时,您都可以收到通知。
输出绑定允许您将数据发送到外部服务。在 Azure 中,这可能是将消息发布到队列,将文档写入 Cosmos DB[6]。或者您可以使用它给Twilio发送短信[7]。
绑定的优点和缺点
绑定的一个优点是,它们可以大大简化应用程序代码,因为它们消除了连接到服务通常需要的许多繁琐的模板代码。
另一个优点是它们提供了一定程度的抽象。虽然由于某些绑定处理的数据具有特定于服务的性质,因此无法与其他替代项交换,但交换组件的功能在开发/测试环境中可能非常有用,因为在开发/测试环境中,你可能不希望或不需要与实际服务进行实际通信。
绑定的主要缺点是,它们通常只公开基础平台功能的相当有限的子集,按照二八原则,通常这个可以满足我们80%场景的需求了,从这个角度来看也不是什么缺点了,你同意我的看法吗?因此,如果您是高级用户,那么您可能更喜欢直接使用服务的SDK。当然,Dapr不会阻止你这样做 - 绑定是完全可选的功能。
Cron绑定
我想特别给你介绍的"cron"绑定[8]是一个特例。它不支持连接到外部系统,它却可以轻松设置计划任务。要进行此设置,您需要定义一个组件 YAML 文件。我这里用官方文档里的一个示例[8] 进行说明,您可以自定义 以满足您的需求。这支持常规的 cron 语法和一些简化的快捷方式,例如每十五分钟一次,如下所示。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: <NAME>
namespace: <NAMESPACE>
spec:
type: bindings.cron
version: v1
metadata:
- name: schedule
value: "@every 15m" # valid cron schedule
scopes:
- catalog
我所做的唯一"高级"操作是通过使用 scopes 属性[9]将此组件限制为仅应用于单个 Dapr 服务- 在此示例中为服务catalog ,现在,我们需要做的就是在与组件名称匹配的终结点上进行侦听。在此示例中,它称为scheduled .请注意,这将作为 HTTP POST请求发出,因此在下面的示例中,我将演示简单的 Node.js Express 应用程序如何在端点上接收调用并向控制台写入消息。
app.post('/scheduled', async function(req, res){
console.log("scheduled endpoint called", req.body)
res.status(200).send()
});
如果我们运行此命令,我们将看到 Dapr 边车每五分钟调用一次终结点/scheduled。 如果在你的项目中没有计划任务的解决方案,Dapr提供了如此简单易用的开箱即用选项真是太好了。
Dapr 的绑定还有很多功能,详细了解可以参考下面几篇文章:
Dapr + .NET Core实战(六)绑定[10]
Dapr-绑定构建块[11]
手把手教你学Dapr - 8. 绑定[12]
Dapr项目应用探索[13]
相关链接
- [1] 从服务之间的调用来看 我们为什么需要Dapr : https://www.cnblogs.com/shanyou/p/15864968.html
- [2] 服务调用构建块 : https://docs.dapr.io/developing-applications/building-blocks/service-invocation/service-invocation-overview/
- [3] 绑定构建块:https://docs.dapr.io/developing-applications/building-blocks/bindings/bindings-overview/
- [4] 事件网格上的事件:https://docs.dapr.io/reference/components-reference/supported-bindings/eventgrid/
- [5] 服务总线:https://docs.dapr.io/reference/components-reference/supported-bindings/servicebusqueues/
- [6] 将文档写入Cosmos DB: https://docs.dapr.io/reference/components-reference/supported-bindings/cosmosdb/
- [7] Twilio 发送短信:https://docs.dapr.io/reference/components-reference/supported-bindings/twilio/
- [8] Cron 绑定:https://docs.dapr.io/reference/components-reference/supported-bindings/cron/
- [9] scopes属性:https://docs.dapr.io/zh-hans/operations/components/component-scopes/
- [10] Dapr + .NET Core实战(六)绑定 :https://www.cnblogs.com/chenyishi/p/15343564.html
- [11] Dapr-绑定构建块 :https://www.cnblogs.com/cwsheng/p/15552408.html
- [12] 手把手教你学Dapr - 8. 绑定 :https://www.cnblogs.com/MASA/p/15822185.html
- [13] Dapr项目应用探索 : https://www.cnblogs.com/cwsheng/p/15733159.html
在 Dapr 中使用 Cron 绑定的计划任务的更多相关文章
- 通过Linux系统Cron执行OwnCloud计划任务
通过Linux系统Cron执行OwnCloud计划任务 02/02/2013 CRON的确是一个非常有用的功能,它有效减少了系统的负载,在将WordPress和StatusNet的任务计划都转换到Cr ...
- Web项目中定时任务无法绑定SessionFactory的问题解决
正常我们在web开发中,由于需要在页面上或者脱离事务时使用到懒加载对应的对象,一般都采用Open Session In View模式. Open Session In View OpenSes ...
- jQuery中的事件绑定方法
在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...
- SpringMVC中使用Cron表达式的定时器
SpringMVC中使用Cron表达式的定时器 cron(定时策略)简要说明 顺序: 秒 分 时 日 月 星期 年份 (7个参数,空格隔开各个参数,年份非必须参数) 通配符: , 如果分钟位置为* 1 ...
- MVC中Action参数绑定的过程
一.题外话 上一篇:MVC中Action的执行过程 ControllerContext 封装有了与指定的 RouteBase 和 ControllerBase 实例匹配的 HTTP 请求的信息. 二. ...
- activity中实现Spinner绑定
(1)须要一个基本的布局文件activity_main <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
- Jquery中的事件绑定$("#btn").bind("click",function(){ })
Jquery中的事件绑定:$("#btn").bind("click",function(){ }) 由于每次都这么调用太麻烦,所以jquery就用$(&qu ...
- Asp.net Mvc 中的模型绑定
asp.net mvc中的模型绑定可以在提交http请求的时候,进行数据的映射. 1.没有模型绑定的时候 public ActionResult Example0() { ) { string id ...
- AngularJS中数据双向绑定(two-way data-binding)
1.切换工作目录 git checkout step-4 #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-m ...
随机推荐
- CapstoneCS5212替代IT6516方案|DP转VGA芯片|替代兼容IT6516
台湾联阳IT6516是一种高性能的DP显示端口到VGA转换器方案芯片.IT6516结合DisplayPort接收器和三重DAC,通过转换功能支持DisplayPort输入和VGA输出.内置Displa ...
- .NET5.0 依赖注入,关于 Autofac 使用
前置 工具 VS2019 概念 关于以下几个概念,自行百度. 控制反转:IoC(Inversion of Control) 依赖注入: 容器:DI 容器(.NET Core 自带),Autofac(本 ...
- EMQX源码编译过程
以emqx4.0.7版本为例 1.安装erlang环境 可以参考:https://www.cnblogs.com/shanfeng1000/p/11951703.html 这里需要注意一下,要按照em ...
- GeoWave实践2:使用命令行将本地矢量数据注入hbase并发布至GeoServer
目录 步骤 补充 步骤 在GeoWave所在的节点打开两个会话窗口. 会话1 //运行GeoServer,默认端口8080 geowave gs run 会话2 //为GeoWave创建数据库Test ...
- centos6.5-Apache优化
Apache的网页压缩功能 一.配置网页压缩功能 在配置压缩功能以前访问网页的响应头部 Response Headers view source Accept-Ranges:bytes Connect ...
- 年功序列c++游戏
题目描述 在虚拟国度里多了很多 Virtual oier,为了树立对后辈的威信,从第 11 个 Virtual oier 开始的 oier 们搞起了年功序列的制度. 虚拟国度的创始人 oier Cht ...
- APICloud超实用经验分享——平台功能
从2016年开始使用APICloud进行app项目开发,到现在也有五六年了.在此过程中伴随着APICloud一起成长,踩过一些坑,自己的技术也提升不少.在APICloud 推出avm框架一年之后,ID ...
- 初识python: while循环 猜年龄小游戏
知识点: 1.python注释方法: 单行注释: # 多行注释: '''注释内容 ''' (单引号或双引号都可以),亦可打印多行 例: #此处是单行注释信息 print('这里是打印内容') #这里 ...
- SYCOJ27猴子选大王
题目-猴子选大王 (shiyancang.cn) 一.出队顺序Description有M个人,其编号分别为1-M.这M个人按顺序排成一个圈.现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然 ...
- 51 Nod 1133 不重叠的线段 (贪心算法)
原题链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1133 题目分析:感觉这到第不应该被分到二级算法题,比 109 ...