public async Task ShouldCompleteProcess()
        {
            // given
            var handledJobs = new List <IJob>();

            // when
            using (zeebeClient.NewWorker()
                   .JobType("oneTask")
                   .Handler(async(jobClient, job) =>
            {
                await jobClient.NewCompleteJobCommand(job).Send();
                handledJobs.Add(job);
            })
                   .MaxJobsActive(1)
                   .Name("csharpWorker")
                   .Timeout(TimeSpan.FromSeconds(10))
                   .PollInterval(TimeSpan.FromMilliseconds(100))
                   .PollingTimeout(TimeSpan.FromSeconds(30L))
                   .Open())
            {
                var processInstance = await zeebeClient.NewCreateProcessInstanceCommand()
                                      .ProcessDefinitionKey(processDefinitionKey)
                                      .WithResult()
                                      .Send();

                // then process was completed
                Assert.AreEqual(1, handledJobs.Count);

                Assert.AreEqual(processInstance.Version, 1);
                Assert.AreEqual(processDefinitionKey, processInstance.ProcessDefinitionKey);
                Assert.AreEqual("oneTaskProcess", processInstance.BpmnProcessId);
                Assert.Greater(processInstance.ProcessInstanceKey, 1);
            }
        }
Ejemplo n.º 2
0
        public static async Task Main(string[] args)
        {
            // create zeebe client
            _client = ZeebeClient.NewZeebeClient(ZeebeUrl);
            // deploy
            var deployResponse = await _client.NewDeployCommand().AddResourceFile(DemoProcessPath).Send();

            // create workflow instance
            var workflowKey = deployResponse.Workflows[0].WorkflowKey;

            // 客户端生成多个流程数据
            await GenerateMultiFlowInstances(workflowKey);

            //await _client.NewSetVariablesCommand(workflowInstance.WorkflowInstanceKey).Variables("{\"func_instance\":\"collect money for your orders\"}").Local().Send();

            // open job worker
            using (var signal = new EventWaitHandle(false, EventResetMode.AutoReset))
            {
                _client.NewWorker()
                .JobType("collectmoney")
                .Handler(HandleJob)
                .MaxJobsActive(5)
                .Name("collectmoney")
                .AutoCompletion()
                .PollInterval(TimeSpan.FromSeconds(1))
                .Timeout(TimeSpan.FromSeconds(10))
                .Open();
                _client.NewWorker()
                .JobType("fetchitems")
                .Handler(HandleJob)
                .MaxJobsActive(5)
                .Name("fetchitems")
                .AutoCompletion()
                .PollInterval(TimeSpan.FromSeconds(1))
                .Timeout(TimeSpan.FromSeconds(10))
                .Open();
                _client.NewWorker()
                .JobType("shipparcel")
                .Handler(HandleJob)
                .MaxJobsActive(5)
                .Name("shipparcel")
                .AutoCompletion()
                .PollInterval(TimeSpan.FromSeconds(1))
                .Timeout(TimeSpan.FromSeconds(10))
                .Open();
                // blocks main thread, so that worker can run
                WaitHandle.WaitAll(new WaitHandle[]
                {
                    signal
                });
            }
        }
Ejemplo n.º 3
0
        public void CreateWorker(string bpmIdentifier, WorkerDefinition workerDefinition)
        {
            _client.NewWorker()
            .JobType(workerDefinition.Identifier)
            .Handler(async(client, job) =>
            {
                Console.WriteLine("Received job: " + job);
                Console.WriteLine($"Start executing custom action for process {bpmIdentifier}");

                string result = workerDefinition.Action.Invoke(job.Key.ToString());

                Console.WriteLine($"Finished executing custom action for process {bpmIdentifier}");

                if (result == null)
                {
                    await client.NewCompleteJobCommand(job.Key)
                    .Send();
                }
                else
                {
                    await client.NewCompleteJobCommand(job.Key)
                    .Variables(result)
                    .Send();
                }
            })
            .MaxJobsActive(500)
            .Name(workerDefinition.Identifier)
            .PollInterval(TimeSpan.FromSeconds(50))
            .PollingTimeout(TimeSpan.FromSeconds(50))
            .Timeout(TimeSpan.FromSeconds(10))
            .Open();
        }
 private void _createWorker(String jobType, JobHandler handleJob)
 {
     _client.NewWorker()
     .JobType(jobType)
     .Handler(handleJob)
     .MaxJobsActive(5)
     .Name(jobType)
     .PollInterval(TimeSpan.FromSeconds(50))
     .PollingTimeout(TimeSpan.FromSeconds(50))
     .Timeout(TimeSpan.FromSeconds(10))
     .Open();
 }
Ejemplo n.º 5
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _fooWorker = _client.NewWorker()
                         .JobType("foo")
                         .Handler((c, j) => Handler(c, j).Wait())
                         .MaxJobsActive(5)
                         .Name(Environment.MachineName)
                         .PollInterval(TimeSpan.FromSeconds(1))
                         .Timeout(TimeSpan.FromMinutes(60))
                         .Open();

            _barWorker = _client.NewWorker()
                         .JobType("bar")
                         .Handler((c, j) => Handler(c, j).Wait())
                         .MaxJobsActive(5)
                         .Name(Environment.MachineName)
                         .PollInterval(TimeSpan.FromSeconds(1))
                         .Timeout(TimeSpan.FromMinutes(60))
                         .Open();

            _foobarWorker = _client.NewWorker()
                            .JobType("barfoo")
                            .Handler((c, j) => Handler(c, j).Wait())
                            .MaxJobsActive(5)
                            .Name(Environment.MachineName)
                            .PollInterval(TimeSpan.FromSeconds(1))
                            .Timeout(TimeSpan.FromMinutes(60))
                            .Open();

            _barfooWorker = _client.NewWorker()
                            .JobType("foobar")
                            .Handler((c, j) => Handler(c, j).Wait())
                            .MaxJobsActive(5)
                            .Name(Environment.MachineName)
                            .PollInterval(TimeSpan.FromSeconds(1))
                            .Timeout(TimeSpan.FromMinutes(60))
                            .Open();

            return(Task.CompletedTask);
        }
Ejemplo n.º 6
0
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _runOptimizationWorker = _client.NewWorker()
                                     .JobType("run-optimize")
                                     .Handler((c, j) => Handler(c, j).Wait())
                                     .MaxJobsActive(5)
                                     .Name(Environment.MachineName + "runoptimal")
                                     .PollInterval(TimeSpan.FromSeconds(1))
                                     .Timeout(TimeSpan.FromMinutes(60))
                                     .Open();

            return(Task.CompletedTask);
        }
Ejemplo n.º 7
0
        public Task JobWorkerCreator()
        {
            using (var signal = new EventWaitHandle(false, EventResetMode.AutoReset))
            {
                _client.NewWorker()
                .JobType("createinstock")
                .Handler(HandleInStockJob)
                .MaxJobsActive(5)
                .Name("createinstock")
                .AutoCompletion()
                .PollInterval(TimeSpan.FromSeconds(1))
                .Timeout(TimeSpan.FromSeconds(10))
                .Open();
                _client.NewWorker()
                .JobType("modifystock")
                .Handler(HandleStockJob)
                .MaxJobsActive(5)
                .Name("modifystock")
                .AutoCompletion()
                .PollInterval(TimeSpan.FromSeconds(1))
                .Timeout(TimeSpan.FromSeconds(10))
                .Open();
                _client.NewWorker()
                .JobType("notify")
                .Handler(HandleNotifyJob)
                .MaxJobsActive(5)
                .Name("notify")
                .AutoCompletion()
                .PollInterval(TimeSpan.FromSeconds(1))
                .Timeout(TimeSpan.FromSeconds(10))
                .Open();

                // blocks main thread, so that worker can run
                signal.WaitOne();
            }

            return(Task.CompletedTask);
        }
        static void Main(string[] _)
        {
            IZeebeClient client = CamundaCloudClientBuilder.Builder()
                                  .UseClientId("Yx6Q63H1Nx~tztL-tGo~tAqJfzLI6pkx")
                                  .UseClientSecret("Qj0cv6CYTc5lmYLIlsbv7XhvPMLU--jJbf~loZywSf3UFeULrGoqtV.0-mj85q2R")
                                  .UseContactPoint("9cfc0e64-b2f5-47ee-af0d-64c24341f4b7.zeebe.camunda.io:443")
                                  .Build();

            client.NewWorker()
            .JobType("celebrate")
            .Handler(JobHandler)
            .MaxJobsActive(3)
            .Timeout(TimeSpan.FromSeconds(10))
            .PollInterval(TimeSpan.FromMinutes(1))
            .PollingTimeout(TimeSpan.FromSeconds(30))
            .Name("CSharpWorker")
            .Open();

            Console.Write("Type any key to stop");
            Console.ReadLine();
        }
Ejemplo n.º 9
0
        public async Task ShouldHandleAllJobs()
        {
            // given
            var handledJobs = new List <IJob>();

            foreach (int i in Enumerable.Range(1, 3))
            {
                await zeebeClient.NewCreateProcessInstanceCommand()
                .ProcessDefinitionKey(processDefinitionKey)
                .Send();
            }

            // when
            using (var signal = new EventWaitHandle(false, EventResetMode.AutoReset))
            {
                using (zeebeClient.NewWorker()
                       .JobType("oneTask")
                       .Handler(async(jobClient, job) =>
                {
                    await jobClient.NewCompleteJobCommand(job).Send();
                    handledJobs.Add(job);
                    if (handledJobs.Count >= 3)
                    {
                        signal.Set();
                    }
                })
                       .MaxJobsActive(5)
                       .Name("csharpWorker")
                       .Timeout(TimeSpan.FromHours(10))
                       .PollInterval(TimeSpan.FromSeconds(5))
                       .Open())
                {
                    signal.WaitOne(TimeSpan.FromSeconds(5));
                }
            }

            Assert.AreEqual(3, handledJobs.Count);
        }