题记:这篇介绍一个很有意思的东西,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. 【转】使用Docx.Core创建word表格

    原文地址:https://www.cnblogs.com/qs315/p/13533765.html 使用Docx.Core创建word表格 下载DocxCore Nuget包 当前版本 1.0.7 ...

  2. 记项目中ES6+gulp+angularjs里的问题

    AngualrJs中可用来注入的有三种类型,service.factory.provider,这三种写法不样,用法也都不一样.其中,service只实例化一次,其实就是单例模式的思想.无论我们在什么地 ...

  3. 安装 mysql 8.0后;root用户在客户端连接不上

    --- mysql workbench Failed to Connect to MySQL at 10.211.55.6:3306 with user root Authentication plu ...

  4. push自定义动画

    // //  ViewController.m //  ViewControllerAnimation // //  Created by mac on 15/5/26. //  Copyright ...

  5. kubeadm/flannel/dashboard/harbor部署以及服务发布

    kubeadm/flannel/dashboard/harbor部署以及服务发布 目录 kubeadm/flannel/dashboard/harbor部署以及服务发布 一.部署kubeadm 1. ...

  6. MinIO简介和java Api的使用

    本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/02/minio-jian-jie-java-api.html MinIO是一个对象存储服务,非常轻量, ...

  7. PostgreSQL删除数据库失败处理

    PostgreSQL Drop DATABASE删除数据库失败,需要结束掉占用的连接 登录PostgreSQL后,执行: SELECT pg_terminate_backend(pg_stat_act ...

  8. 解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题

    通常把jsp页面放在webRoot的/WEB-INF下可以防止访问者直接输入页面. 而webRoot的/WEB-INF下的页面是受保护的,用户无法通过形如http://localhost:8080/t ...

  9. C#设置进程PATH环境变量值解决某些Win32DLL找不到路径问题

    C#.NET通过设置当前进程PATH环境变量值解决某些Win32DLL找不到路径问题 以下函数设置PATH环境变量值(请注意:该环境变量为当前进程的环境变量,非系统环境变量)用于解决在调用某些Win3 ...

  10. SpringBoot自定义classloader加密保护class文件

    背景 最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密 ...