我昨天写了一篇关于在微服务应用程序中采用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 中使用 Cron 绑定的计划任务的更多相关文章

  1. 通过Linux系统Cron执行OwnCloud计划任务

    通过Linux系统Cron执行OwnCloud计划任务 02/02/2013 CRON的确是一个非常有用的功能,它有效减少了系统的负载,在将WordPress和StatusNet的任务计划都转换到Cr ...

  2. Web项目中定时任务无法绑定SessionFactory的问题解决

    正常我们在web开发中,由于需要在页面上或者脱离事务时使用到懒加载对应的对象,一般都采用Open Session In View模式.   Open Session In View   OpenSes ...

  3. jQuery中的事件绑定方法

    在jQuery中,事件绑定方法大致有四种:bind(),live(), delegate(),和on(). 那么在工作中应该如何选择呢?首先要了解四种方法的区别和各自的特点. 在了解这些之前,首先要知 ...

  4. SpringMVC中使用Cron表达式的定时器

    SpringMVC中使用Cron表达式的定时器 cron(定时策略)简要说明 顺序: 秒 分 时 日 月 星期 年份 (7个参数,空格隔开各个参数,年份非必须参数) 通配符: , 如果分钟位置为* 1 ...

  5. MVC中Action参数绑定的过程

    一.题外话 上一篇:MVC中Action的执行过程 ControllerContext 封装有了与指定的 RouteBase 和 ControllerBase 实例匹配的 HTTP 请求的信息. 二. ...

  6. activity中实现Spinner绑定

    (1)须要一个基本的布局文件activity_main <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...

  7. Jquery中的事件绑定$(&quot;#btn&quot;).bind(&quot;click&quot;,function(){ })

    Jquery中的事件绑定:$("#btn").bind("click",function(){  }) 由于每次都这么调用太麻烦,所以jquery就用$(&qu ...

  8. Asp.net Mvc 中的模型绑定

    asp.net mvc中的模型绑定可以在提交http请求的时候,进行数据的映射. 1.没有模型绑定的时候 public ActionResult Example0() { ) { string id ...

  9. AngularJS中数据双向绑定(two-way data-binding)

    1.切换工作目录 git checkout step-4 #切换分支,切换到第4步 npm start #启动项目 2.代码 app/index.html Search: <input ng-m ...

随机推荐

  1. 1084 - Winter

    1084 - Winter   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Winter is ...

  2. linux - 运维知识

    使用nmap检测服务器端口安全性 https://blog.csdn.net/jayjaydream/article/details/108555250

  3. [数据结构]常见数据结构的typedef类型定义总结

    目录 数据结构类型定义: 1.线性表 线性表(顺序存储类型描述): 线性表(动态存储类型描述) 2.线性表的链式表示 双链表的结点类型描述: 静态链表结点类型的描述: 3.栈的数据结构 顺序栈的数据结 ...

  4. JS运行三部曲(预编译)

    JS运行的三个步骤: 语法分析 预编译 解释执行 语法分析:通俗来说就是通篇检查你的代码有没有语法错误,有语法错误的话,程序是不会执行的 解释执行:也就是程序读一句执行一句 最重点的也就是预编译了,那 ...

  5. 简单查看windows蓝屏原因

    相信各位在使用windows(xp.7.8.1.10...)过程中都遇到过蓝屏的情况,而蓝屏时,系统会将其记录起来,并追踪到引起蓝屏的程序,以下内容将简单介绍一下如何查看引起windows蓝屏的原因: ...

  6. nginx之location、inmp架构详解、BBS项目部署

    本期内容概要 location lnmp架构 部署BBS项目 内容详细 1.location 使用Nginx Location可以控制访问网站的路径 但一个server可以有多个location配置 ...

  7. 《selenium2 python自动化测试》(高清).PDF,免费无需任何解压密码

    链接:https://pan.baidu.com/s/1eAI0mXvJeblBn2Tn9WClEA 提取码:7m5u

  8. python 根据传进来的参数,动态拼接sql

    根据传进来的参数,动态拼接sql,可用于实现一个方法,有些字段不确定,又用到的情况,如查询,三个查询条件,有的时候只用到一个查询条件,其他用不到则不需要拼接 def show_runjob_detai ...

  9. 初识python 之 爬虫:使用正则表达式爬取“古诗文”网页数据

    通过requests.re(正则表达式) 爬取"古诗文"网页数据. 详细代码如下: #!/user/bin env python # author:Simple-Sir # tim ...

  10. Selenium_获取元素文本、属性值、尺寸(8)

    from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...