我昨天写了一篇关于在微服务应用程序中采用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. x86-2-保护模式

    x86-2-保护模式 操作系统负责计算机上的所有软件和硬件的管理,它可以百分百操作计算机的所有内容.但是,操作系统上编写的用户程序却应当有所限制,只允许用户程序访问属于自己程序的内容,不然整个生态就很 ...

  2. Notepad++快速选中多行

    我们在编辑文章的时候, 通常需要选择多行连续的文本, 可以使用Shift+鼠标选择多行文本, 如果一次需要选择的文本太多, 比如选择10000到20000行之间的文本, 鼠标要拉好久,手一累一抖,又要 ...

  3. websocket在线测试工具

    为了测试websocket, 根据网上的一些工具修改了一些, 因此得到了这个工具 源码 源码: <!DOCTYPE html> <html lang="en"&g ...

  4. STM32时钟系统的配置寄存器和源码分析

    一.时钟系统 概述 时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令,时钟系统就是CPU的脉搏,决定cpu速率. STM32有多个时钟来源的选择,为什么 STM32 要有多个时钟源呢 ...

  5. Python_类型转换

    列表与字符串互相转换 join方法将list转换为string _list = ["a", "b", "c"] # 以".&quo ...

  6. django中的时区问题

    在django中设置时区,通过setting文件中的: TIME_ZONE = 'Asia/Shanghai' 开起多时区支持功能:USE_TZ=True 这时在数据库中插入的时间为UTC时间,当调用 ...

  7. vue 多级路由嵌套后打开页面是空白

    在多层路由嵌套时,一级子目录必须有一个页面并且添加一具<router-view>,否则路由跳转页面为空,没有任何显示 来自为知笔记(Wiz)

  8. 使用 try-catch

    ECMA-262 第 3 版引入了 try-catch 语旬,当 try-catch 语句中发生错误时, 浏览器会认为错误已经被处理了 ,因而不会报告错误.对于那些不要求用户懂技术,也不需要用户理解错 ...

  9. HDOJ1573X问题

    https://acm.hdu.edu.cn/showproblem.php?pid=1573 n组线性同余方程求解,最后求出多少解.而最终的解的周期为最小公倍数,范围内的,需要这样算.如果最小超过, ...

  10. Vulnhub系列:Tomato(文件包含getshell)

    这个靶机挺有意思,它是通过文件包含漏洞进行的getshell,主要姿势是将含有一句话木马的内容记录到ssh的登录日志中,然后利用文件包含漏洞进行包含,从而拿到shell 0x01 靶机信息 靶机:To ...