首页 > 其他分享 >.NET 使用Camunda快速入门

.NET 使用Camunda快速入门

时间:2023-05-16 11:47:03浏览次数:38  
标签:入门 流程 System https Camunda using NET public

简介参考:https://www.cnblogs.com/lvdeyinBlog/p/16095603.html

 

一.工作流介绍

1. 什么是工作流

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。

工作流将一套大的业务逻辑分解成业务逻辑段, 并统一控制这些业务逻辑段的执行条件,执行顺序以及相互通信,实现业务逻辑的分解和解耦。

做饭:

贷款审批:

2. 为什么要使用工作流

在企业日常的管理中,经常会有出差申请、加班申请、请假申请等流程。

如果用人工的方式管理这些流程,效率低,管理成本高。

因此为了提高效率,我们需要使用到工作流开发。

3. 使用工作流有什么好处

在工作流开发中,我们可以通过每一个流程定义清楚的看到业务的所有步骤,以及每一个流程实例运行到什么位置,参与者是谁;

能够节省更多的时间成本,提升企业信息化水平。

二. 工作流引擎

1. Camunda介绍

Camunda是一种工作流引擎,是由Java开发的一个纯Java库。

工作流引擎是用来开发工作流的框架。

市面上主流的工作流引擎有Activiti、Flowable、Camunda等。

Activiti Activiti 由 Alfresco 公司开发,目前最高版本为 Activiti cloud 7.1.0。由于团队分歧 ,在Activiti6版本衍生出了Flowable。 
Flowable Flowable是基于Activiti6衍生出来的版本,开发团队也是Activiti中分裂出来的,修复了Activiti6中的bug,并再此基础上实现的DMN、BPEL支持。 
Camunda Camunda是基于Activiti5的,最新版本是Camunda7.17,开发团队也是从Activiti中分裂出来的,发展轨迹和Flowable相似。通过压力测试验证Camunda BPMN引擎性能和稳定性更好,功能完善;除了BPMN,Camunda还支持CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还有很多强大的工具,用于建模、任务管理、监控和用户管理等。 

Camunda BPM(业务流程管理)平台,用来管理,部署的流程定义、执行任务、策略等等。

下载安装一个Camunda平台,成功解压 Camunda 平台的发行版后,执行名为start.bat(对于 Windows 用户)或start.sh(对于 Unix 用户)的脚本。此脚本将启动应用程序服务器。

打开您的 Web 浏览器并导航到http://localhost:8080/以访问欢迎页面,Camunda的管理平台。

Camunda Modeler(用于编辑流程图及其他模型)平台,用来定义流程图,简单说就是一个画图工具。

下载 Modeler 后,只需将下载文件解压缩到您选择的文件夹中。

成功解压缩 zip 后,运行camunda-modeler.exe(对于 Windows 用户)、camunda-modeler.app(对于 Mac 用户)或camunda-modeler.sh(对于 Linux 用户)。  

2. Camunda常用Api

RepositoryService

该服务提供了管理和操控流程部署和流程定义的操作方法。

(1)查询流程引擎所知道的部署和流程定义。

(2)挂起、激活流程定义。挂起意味着不能进行下一步的操作,而激活则是反操作。

(3)获取各种资源,比如部署种包含的文件,或者引擎自动生成的流程图等。

RuntimeService

处理已经启动的流程实例,查询流程实例和执行。

TaskService

需要被用户或者系统执行的任务是流程引擎的核心,跟任务有关的资源都在这个服务中:

(1)查询分配给用户或组的任务。

(2)创建新的独立任务。

(3)控制将任务分配给那个用户,或者那些用户,以及以何种方式参与到任务中。 认领并完成一个任务。认领是指某个用户决定承担某个任务。 

FormService

获取表单相关的服务,可获取启动表单、审批表单,提交表单等操作。

HistoryService

获取执行的历史任务、历史的审批记录、参数、表单等信息。

三、学习步骤:

1、Camunda 官方快速入门教程中文版: https://zhuanlan.zhihu.com/p/375908620 或者 https://blog.csdn.net/zoollcar/article/details/117351192

   Camunda  Rest API 文档:  https://docs.camunda.org/rest/camunda-bpm-platform/7.19/

   Camunda 官网:   https://camunda.com/

 

2、使用Nuget包 Camunda.Worker GitHub 地址: https://github.com/AMalininHere/camunda-worker-dotnet 找里面的samples文件夹下的使用Demo代码

3、在VS2022上写一个Demo

3.1、创建一个.net6 web空模板服务,然后安装Nuget包 Camunda.Worker

<PackageReference Include="Camunda.Worker" Version="0.13.5" />

3.2、Program.cs改成如下

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CamundaDemoWeb
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

3.3、Startup.cs 注入Camunda 

using Camunda.Worker;
using Camunda.Worker.Client;
using CamundaDemoWeb.Handlers;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CamundaDemoWeb
{
    public class Startup
    {

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddExternalTaskClient(client =>
            {
                //client.BaseAddress = new Uri("http://localhost:8080/engine-rest");
                client.BaseAddress = new Uri("http://192.168.1.153:8080/engine-rest");
            });

            services.AddCamundaWorker("sampleWorker")
                .AddHandler<SayHelloHandler>()
                //.AddHandler<SayHelloGuestHandler>()
                .ConfigurePipeline(pipeline =>
                {
                    pipeline.Use(next => async context =>
                    {
                        var logger = context.ServiceProvider.GetRequiredService<ILogger<Startup>>();
                        logger.LogInformation("Started processing of task {Id}", context.Task.Id);
                        await next(context);
                        logger.LogInformation("Finished processing of task {Id}", context.Task.Id);
                    });
                });

            services.AddHealthChecks();
        }
      
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });
        }
    }
}
View Code

3.4、写一个SayHelloHandler

using Camunda.Worker;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;

namespace CamundaDemoWeb.Handlers
{
    //[HandlerTopics("sayHello", LockDuration = 10_000)]
    //[HandlerVariables("USERNAME")]
    [HandlerTopics("charge-card", LockDuration = 5_000)]
    [HandlerVariables("amount")]
    public class SayHelloHandler : IExternalTaskHandler
    {
        public async Task<IExecutionResult> HandleAsync(ExternalTask externalTask, CancellationToken cancellationToken)
        {
            await Task.CompletedTask;
            //throw new System.NotImplementedException();
            var username = externalTask.Variables["amount"].Value;

            //await Task.Delay(1000);

            return new CompleteResult
            {
                Variables = new Dictionary<string, Variable>
                {
                    ["MESSAGE"] = Variable.String("Hello, Guest!")
                }
            };


            
        }
    }
}
View Code

 

  

 

标签:入门,流程,System,https,Camunda,using,NET,public
From: https://www.cnblogs.com/hudean/p/17404452.html

相关文章

  • nodejs 入门基本操作
    操作fs模块constpath=require("path");constfs=require("fs");/*相对路径是命令窗口执行的目录node提供了path模块来操作路径相关的api,其中__dirname是一个内置的变量,返回当前文件所在的目录*/constgetDirUrl=dir=>{returnpath.resolve(__dirname,dir)......
  • jointjs 入门
    链接http://www.bjhee.com/jointjs.html用JointJS做一个简单的功能控制图2019年1月30日 | 前端文章目录继上一篇介绍了GoJS之后,继续研究JS的绘图工具,毕竟GoJS有些小贵。这次选择了JointJS,完全开源,它还有一个商业版本叫Raddit,功能更强大。不过就我的需求场景,开源的Join......
  • AI绘画Stable Diffusion整合包V4三分钟超快速入门!
    本次整合包升级内容StableDiffusion整合包V4下载-torch2、xformers0.0.17、cudnn8.8打开无需任何操作即可满速(包括40系显卡-升级其它各种依赖版本-预置了Tagger(图反推关键词)的模型-预置了ControlNet、MultiDiffusion插件-优化了一些其他设置整合包只是打包了运行必须的py......
  • kettle从入门到精通 第十九课 kettle 资源仓库
    1、kettle里面的资源仓库的意思就是存放转换(.ktr)或者job(.kjb)文件的地方。通过spoon客户端右上角可以进行设置资源仓库。 2、kettle的资源仓库有三种方式1)本地文件存储,此种方式最简单,适用于本地单人开发测试。2)数据库db存储,此种方式适合团队协作,可以将文件存储到数据库里面......
  • 创建.Net项目模板包
    1.准备解决方案打包文件创建文件夹Template在Template下创建template.csproj,内容如下<ProjectSdk="Microsoft.NET.Sdk"><PropertyGroup><PackageType>Template</PackageType><PackageVersion>1.0.0</PackageVersion>......
  • nodejs 入门基本概念
    nodejs的诞生  Node.js是2009的时候由大神RyanDahl开发的。Ryan的本职工作是用C++写服务器,后来他总结出一个经验,一个高性能服务器应该是满足“事件驱动,非阻塞I/O”模型的。C++开发起来比较麻烦,于是Ryan就想找一种更高级的语言,以便快速开发。  Ryan发现JS语......
  • Docker入门与实战-Docker镜像的使用
    Docker入门与实战二.Docker镜像的使用1.获取镜像​ 命令:docker[image]pullimage-name[:tag]​ 说明:​ name为镜像仓库名称,严格来说,该name应该由注册服务器地址+镜像仓库名称组成,这样做可以避免不同仓库(注册服务器)下的镜像名称冲突的问 题,如果该注册服务器地......
  • Intellij Idea教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介IDEA全称IntelliJIDEA,是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBra......
  • Netty高手必知必会的ChannelHandlerContext技巧
    1概述ChannelHandlerContext代表ChannelHandler和ChannelPipeline之间的关联,每当有ChannelHandler添加到ChannelPipeline,都会创建ChannelHandlerContext。1.1主要功能管理它所关联的ChannelHandler和在同一个ChannelPipeline中的其他ChannelHandler之间的交互。Ch......
  • Docker+jenlins+gitee部署net6
    1.Docker安装。Docker->虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。1、选择要安装的平台Docker要求CentOS系统的内核版本高于3.10uname-r#通过uname-r命令查看你当前的内核版本安装文档地址2、选择......