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); } }
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 }); } }
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(); }
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); }
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); }
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(); }
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); }