题记:这篇介绍一个很有意思的东西,Dapr和Logic Apps这样的工作流引擎集成。

Dapr工作流

在1年多前,Dapr的孵化团队搞了一个很有意思的东西:把Dapr和Logic Apps集成起来,实现Dapr内置的工作流引擎。

官方文档:

https://docs.dapr.io/developing-applications/integrations/azure/workflows/

官方博客:

https://cloudblogs.microsoft.com/opensource/2020/05/26/announcing-cloud-native-workflows-dapr-logic-apps/

Logic Apps是Azure上的一个PaaS/SaaS服务,可以认为是一个云端的BPM。官方文档的介绍如下:

Azure 逻辑应用是一个基于云的平台,用于创建和运行集成应用、数据、服务和系统的自动化工作流。借助此平台,可以快速为企业和企业到企业 (B2B) 方案开发高度可缩放的集成解决方案。作为 Azure Integration Services 的成员,Azure 逻辑应用简化了跨云、本地和混合环境连接旧式、新式和一流系统的方式。

由于Logic Apps(通过NuGet)提供了独立的运行时和SDK,所以Dapr可以把其集成进来,获得如下好处:

  • 在任意环境运行Logic Apps工作流:本地机器、私有数据中心、Kubernetes集群或者公有云。

  • 通过Dapr获得内置的跟踪、度量和mTLS能力

  • 为你的工作流提供gRPC和HTTP端点

  • 利用Dapr的绑定或发布订阅事件来触发工作流执行

  • 通过调用Dapr的状态存储、发布消息等功能来编排复杂的工作流场景

当然微软目前主要是通过跨云产品Azure Arc来把Azure上的很多应用服务引入到其他环境,见:

https://azure.microsoft.com/en-us/blog/build-cloudnative-applications-that-run-anywhere/

实现原理

集成的基本原理其实很简单,把Logic Apps运行时包装到一个实现Dapr规范接口的gRPC Server,并以Dapr应用的方式来运行:

然后把Logic Apps的工作流定义json文件加载进去,通过Dapr的服务调用、绑定或者发布订阅来“触发”这些工作流。通过代码可知,“触发”最终还是通过http trigger的方式来启动工作流实例。

正因为这种巧妙的架构,加上Dapr强大的能力,我才可以很简单的就为其实现了发布订阅触发工作流的能力(一开始的版本仅支持服务调用和绑定触发)。

支持发布订阅的版本的代码见:

https://github.com/heavenwing/dapr-workflows/tree/SupportPubSub

你可以Clone代码到本地,然后根据README的说明来尝试。也可以把这个工作流引擎集成到你的Dapr应用程序当中,实现灵活的业务流程处理。

更多思考

理论上,我们可以使用这样的架构,把任何工作流引擎集成到Dapr当中,只要这个引擎的运行时可以被一个外壳应用程序包装。

另外,大家可能会问,那么我如何得到工作流订阅json文件呢?如果你对Logic Apps的工作流规范很熟悉,尽可以纯手写json;但其实最简单的方式是到Azure Portal里面新建一个Logic Apps,直接利用它的设计器来获得工作流定义json文件,我的代码中的workflow3.json就是这样得到的。

Logic Apps工作流语言参考文档在:

https://docs.microsoft.com/zh-cn/azure/logic-apps/logic-apps-workflow-definition-language

Dapr云原生应用开发系列7:工作流集成相关推荐

  1. 浅析云平台底层架构 进行云原生应用开发 系列课程-薛海涛-专题视频课程

    浅析云平台底层架构 进行云原生应用开发 系列课程-2892人已学习 课程介绍         如何依托Bluemix的PaaS服务,开发云原生应用,并深入的讲解cloudfoundry app生命周期 ...

  2. Dapr微服务应用开发系列5:发布订阅构建块

    题记:这篇介绍发布订阅构建块,这是对事件驱动架构设计的一种实现落地. 注:对于"Building Blocks"这个词组的翻译,我之前使用了"构件块",现在和官 ...

  3. 开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门

    点击下载<Knative 云原生应用开发指南> 自 2018 年 Knative 项目开源后,就得到了广大开发者的密切关注.Knative 在 Kubernetes 之上提供了一套完整的应 ...

  4. Dapr微服务应用开发系列4:状态管理构件块

    Dapr微服务应用开发系列0:概述 Dapr微服务应用开发系列1:环境配置 Dapr微服务应用开发系列2:Hello World与SDK初接触 Dapr微服务应用开发系列3:服务调用构件块 题记:这篇 ...

  5. 云原生AI开发平台架构及核心优势

    导读: 云原生AI开发平台以云原生容器服务为基础架构调用云资源,配合大数据计算.人工智能计算以及分布式计算框架,服务于企业的数据分析.模型训练以及AI应用部署需求.借助容器.微服务.无服务器等云原生优 ...

  6. 艾瑞咨询:2021年中国云原生AI开发平台白皮书

    国内人工智能技术成熟度持续提升.服务种类不断丰富,在企业经营管理各环节的价值已得到市场的初步验证,然而当前国内甲方企业进行人工智能应用仍然面临着一系列问题. 云原生AI开发平台融合了成熟的人工智能开发 ...

  7. 全网首发:逐一解读云原生应用开发“12-Factors”

    本文转自微信号EAWorld.扫描下方二维码,关注成功后,回复"普元方法+",将会获得热门课堂免费学习机会! 本文节选自普元信息即将出版的<微服务企业架构最佳实践>一书 ...

  8. 微软开源微服务运行时Dapr,赋能云原生应用开发

            Dapr 是一个可移植的.由事件驱动的 Serverless 运行时,用于跨云和边缘构建分布式应用程序.10月9日,正式以 MIT 协议开源. Dapr 使开发人员能够轻松地构建弹性. ...

  9. Dapr微服务应用开发系列0:概述

    题记:Dapr是什么,Dapr包含什么,为什么要用Dapr. Dapr是什么 Dapr(Distributed Application Runtime),是微软Azure内部创新孵化团队的一个开源项目 ...

最新文章

  1. java linux so
  2. 除了分析引擎 2.0,神策再发一波儿新功能!
  3. 如何验证本地磁盘或网络磁盘是否可以进行读写操作
  4. log4j配置文件及nutch中的日志配置
  5. 【状压DP】吃货JYY(luogu 6085)
  6. 在URL参数中传递复杂对象
  7. 分享自己写的一个贪吃蛇的游戏(Linux)
  8. allow_pickle什么意思_如何修复草图算法中“当allow_pickle=False时无法加载对象数组”...
  9. 自如总部摘牌?官方回应:更换logo 业务一切正常
  10. 移动webAPP前端开发技巧汇总
  11. 可偏导不一定连续的例子
  12. 冒泡详解(分析每一步)
  13. Innovation - 3W咖啡馆 - 这里是互联网人的社交圈子
  14. 我每年得忽悠10万程序员上车
  15. 万豪国际集团贵州首家万枫酒店在贵阳会展中心开业
  16. PHP 记录访客的浏览信息
  17. iOS的电量测试(Sysdiagnose)
  18. OSPF虚连接(VLINK)配置案例
  19. 弘辽科技:拼多多五步教你日销百单
  20. 那些程序员才懂的笑话

热门文章

  1. CCR源码分析-CCR架构
  2. Windows server 2003 CA配置(一)
  3. sqlite3源码编译到Android,实现SQLite跨全平台使用
  4. linux网卡固件名,修改CentOS7网卡名称为传统名称eth0格式
  5. mysql 5.6.31 winx64_详解介绍MySQL5.6.31winx64.zip安装配置的图文教程
  6. Java的三种代理模式完整源码分析
  7. python之_init_函数的简介
  8. [USACO13JAN] Cow Lineup (单调队列,尺取法)
  9. UVA - 11181 数学
  10. LeetCode: 14. Longest Common Prefix