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

2023-11-05 20:48

本文主要是介绍Dapr云原生应用开发系列7:工作流集成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题记:这篇介绍一个很有意思的东西,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应用的方式来运行:

e04dc8cc106ba289a58780af105c4188.png

然后把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:工作流集成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352405

相关文章

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N