camunda-community-hub / zeebe-client-csharp

Contains an Zeebe C# client implementation.
https://camunda-community-hub.github.io/zeebe-client-csharp/
Apache License 2.0
97 stars 52 forks source link

Add support for job streaming #661

Open inghak opened 6 months ago

inghak commented 6 months ago

The Java and Go clients are supporting the newish Job Streaming feature (job push). It seems to me the C# client is yet not?

The C# client should support job streaming the same way as the GO an Java clients does, with a configurable boolean property StreamEnabled.

A very impressive performance blog of Job Streaming: https://zeebe-io.github.io/zeebe-chaos/2024/01/19/Job-Activation-Latency/ Docs describing the concept: https://docs.camunda.io/docs/components/concepts/job-workers/ Doc for this feature in Java client: https://docs.camunda.io/docs/apis-tools/java-client/job-worker/#job-streaming Doc for this feature in GO client: https://docs.camunda.io/docs/apis-tools/go-client/job-worker/#job-streaming

This is a new absolute core feature of Camunda-Platform that should be supported in the C# client. It has potentially big impact on performance and seems to be a better and newer iteration to, in many cases, replace long polling.

inghak commented 3 months ago

From a business perspective, I believe it is a mistake for Camunda to downplay .NET integrations. The .NET ecosystem has a significant market share and a strong willingness and ability to pay. When .NET-centric businesses evaluate business process software, .NET integration is a crucial factor. It would be wise to develop integration channels equally across the main technology options. I.e. while Go is a great language, from a business standpoint, it is yet not close to .NET. :)

Zelldon commented 3 months ago

Thanks @inghak for the input. I forwarded your comment internally :) 🙇🏼

While I would like to give more support in general, I do not have enough time right now to build additional features. Or at least I can't give guarantees for it. It will happen sporadically.

Side note: as I implemented parts of it also in the Java client, I might have some ideas to add this functionally to the .net client as well.

xlegalles commented 3 months ago

It's also up to the community to make it move. Will try to spend some time on it. @Zelldon if you have any comments to share, don't hesitate. Also, I will of course take a look at the Java implementation.

dimasm61 commented 2 months ago

@Zelldon @xlegalles What about this realization? https://github.com/dimasm61/zeebe-client-csharp/compare/main..feat_add_streaming It works, but I haven’t done the tests and checked on a high load. The changes are minimal, but the design (with creating two ActivateJobsRequest & StreamActivatedJobsRequest instances) is not very good. And there are many options, I’m afraid not to guess the right ) Any ideas on that?

xlegalles commented 2 months ago

Sorry I'm in vacation right now. Will take a look soon.