Zeebe服务学习1 | 您所在的位置:网站首页 › zeebe教程 › Zeebe服务学习1 |
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 Code4.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 实验室设备网 版权所有 |