题记:这篇介绍一个很有意思的东西,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. 开放下载 | 《Knative 云原生应用开发指南》开启云原生时代 Serverless 之门

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

  2. 《Kubernetes与云原生应用》系列之容器设计模式

    http://www.infoq.com/cn/articles/kubernetes-and-cloud-native-app-container-design-pattern <Kubern ...

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

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

  4. Dapr | 云原生的抽象与实现

    引言 Dapr 是微软主导的云原生开源项目,2019年10月首次发布,到今年2月正式发布 V1.0 版本.在不到一年半的时间内,github star 数达到了 1.2 万,超过同期的 kuberne ...

  5. 云原生强大且灵活的持续集成CI开源框架Tekton实战-上

    @ 目录 概述 定义 常见CICD工具 使用好处 组件 基本概念 安装 前提条件 安装Tekton Pipelines 创建并运行任务 安装Dashboard 安装Cli Pipelines示例演示 ...

  6. Dapr微服务应用开发系列1:环境配置

    题记:上篇Dapr系列文章简要介绍了Dapr,这篇来谈一下开发和运行环境配置 本机开发环境配置 安装Docker 为了方便进行Dapr开发,最好(其实不一定必须)首先在本机(开发机器)上安装Docke ...

  7. 云原生应用开发12-Factors

    英文地址:https://12factor.net/ 中文地址:https://12factor.net/zh_cn/ 文章内容 简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软 ...

  8. Dapr微服务应用开发系列2:Hello World与SDK初接触

    题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...

  9. Dapr微服务应用开发系列3:服务调用构件块

    题记:这篇开始逐一深入介绍各个构件块,从服务调用开始 原理 所谓服务调用,就是通过这个构件块让你方便的通过HTTP或者gRPC协议同步调用其他服务的方法,这些方法也是通过HTTP或者gRPC来暴露的. ...

随机推荐

  1. MySQL不建议delete删除数据

    InnoDB存储架构 从这张图可以看到,InnoDB存储结构主要包括两部分:逻辑存储结构和物理存储结构. 逻辑上是由表空间tablespace -> 段segment或者inode -> ...

  2. 让HTML和JSP页面不缓存从Web服务器上重新获取页面

    感谢原文作者:佚名 原文链接:https://www.jb51.net/web/100639.html 问题描述 用户退出后,如果点击浏览器上的后退按钮,Web应用将不能正确保护受保护的页面--在Se ...

  3. Token+Redis实现接口幂等性

    一.什么是 幂等性 在编程中,幂等性的特点就是其任意多次执行的效果和一次执行的效果所产生的影响是一样的. 二.Token+Redis的实现思路 1.数据提交前要向服务的申请 token(用户登录时可以 ...

  4. centOs编译安装php7.2支持微擎php扩展

    发现yum安装许多坑 于是只好编译安装 第一步得到镜像地址 在      https://www.php.net/downloads.php     有的地址比较慢,需要耐心等待 cd /usr/lo ...

  5. ittun.com的使用方法

    [如果这篇文章对你有所作用,请加关注哦!] 步骤一: 进入官网http://ittun.com/ Windows 64位下载http://ittun.com/upload/17.2/ittun_win ...

  6. Ansible 自动化运维——剧本(playbook)

    Ansible 自动化运维--剧本(playbook) 1.playbook介绍: playbook是ansible用于配置,部署,和管理被控节点的剧本.通过playbook的详细描述,执行其中的ta ...

  7. 实现redis哨兵,模拟master故障场景

    由于主从架构无法实现master和slave角色的自动切换,所以在发送master节点宕机时,redis主从复制无法实现自动的故障转移,即将slave 自动提升为新的master.因此,需要配置哨兵来 ...

  8. spring boot 配置静态路径

    一  前言 最近有个项目,需要上传一个zip文件(zip文件就是一堆的html压缩组成)的压缩文件,然后后端解压出来,用户可以预览上传好的文件. 查看资料,spring boot对静态文件,可以通过配 ...

  9. Solution -「SDOI 2018」「洛谷 P4606」战略游戏

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的无向连通图,\(q\) 次询问,每次给出一个点集 \(s\),求至少在原图中删去多 ...

  10. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...