Zeebe服务学习1 您所在的位置:网站首页 zeebe教程 Zeebe服务学习1

Zeebe服务学习1

#Zeebe服务学习1| 来源: 网络整理| 查看: 265

1.Zeebe是什么?

Camunda公司研发的工作流引擎Zeebe,目标是对微服务的编排。具体详细介绍可以参考官网:https://zeebe.io/what-is-zeebe/

2.背景

随着微服务的发展,大家都单体服务进行了拆分,解耦,这样做引发了另外的一个问题:之前一个接口实现的功能,现在需要调用几个接口才能完成。如何解决这些原子性的接口呢?

这时候我们想到了Zeebe服务。

3.服务部署

  3.1 第一步:安装环境,不管你是Linux系统还是Win系统,首先需要安装上docker,因为我的机器是Win系统,本文就是介绍Windows系统下安装使用情况

  确保机器已经安装docker(没有安装的可以下载docker-win,进行安装)

3.2 第二步:在cmd里面执行命令:

docker run --name zeebe -p 26500:26500 camunda/zeebe:latest

  至此,Zeebe服务已经安装成功了。

4.demo

4.1 第一步:创建一个控制台项目,这个应该都会

4.2 第二步:在项目中引用Zeebe客户端的nuget包,目前版本是0.11.0

4.3 第三步:建模,使用Zeebe Modeler工具进行建模

我需要实现的流程是:

 具体的BPMN代码如下:

SequenceFlow_instock SequenceFlow_instock SequenceFlow_modifystock SequenceFlow_modifystock SequenceFlow_gateway SequenceFlow_gateway morethan300 lessthan300 morethan300 SequenceFlow_end stocknum;=300 lessthan300 SequenceFlow_end stocknum;300 View Code

4.4 第四步:写代码

(1)客户端代码:

internal class Program { private static readonly string DemoProcessPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "instock-process.bpmn"); private static readonly string ZeebeUrl = "127.0.0.1:26500"; private static dynamic WorkflowInstanceVariables = new { stocknum = 100 }; public static async Task Main(string[] args) { InitClient.Initialize(); // create zeebe client var client = ZeebeClient.NewZeebeClient(ZeebeUrl); // deploy // var deployResponse = await client.NewDeployCommand().AddResourceFile(DemoProcessPath).Send(); // create workflow instance // var workflowKey = deployResponse.Workflows[0].WorkflowKey;//2251799813685495 // 模拟调用 var workflowInstance = await client .NewCreateWorkflowInstanceCommand() .WorkflowKey(2251799813685495) .Variables(JsonConvert.SerializeObject(WorkflowInstanceVariables)) .Send(); } }

(2)服务端代码:

internal class Program { private static Dictionary JobTypeAndMethod = new Dictionary() { { "createinstock","InStockJobHandler"}, { "modifystock","StockJobHandler"}, { "notify","NotifyJobHandler"} }; private static readonly string ZeebeUrl = "127.0.0.1:26500"; public static async Task Main(string[] args) { InitClient.Initialize(); // create zeebe client var client = ZeebeClient.NewZeebeClient(ZeebeUrl); // open job worker await OpenJobWorkers(client); } private static Task OpenJobWorkers(IZeebeClient client) { using (var signal = new EventWaitHandle(false, EventResetMode.AutoReset)) { foreach (var item in JobTypeAndMethod) { client.NewWorker() .JobType(item.Key) .Handler(JobHandlerFactory.GetJobType(item.Value)) .MaxJobsActive(5) .Name(item.Key) .AutoCompletion() .PollInterval(TimeSpan.FromSeconds(1)) .Timeout(TimeSpan.FromSeconds(10)) .Open(); } // blocks main thread, so that worker can run signal.WaitOne(); } return Task.CompletedTask; } }

客户端的代码中,只有第一次会将BPMN文件进行部署,Zeebe服务会返回一个Key,之后如果建模数据不发生改变的情况下,就可以直接使用key进行调用即可了,如果发生变化需要再一次部署才行;

每次部署都会改变工作流程的Version值(默认获取的事latestVersion)。

至此,一个简单的Zeebe Demo实现了。

原文地址:https://www.cnblogs.com/walt/p/11298154.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有