Class JobClientImpl

java.lang.Object
io.camunda.zeebe.client.impl.worker.JobClientImpl
All Implemented Interfaces:
JobClient

public final class JobClientImpl extends Object implements JobClient
  • Constructor Details

  • Method Details

    • newCompleteCommand

      public CompleteJobCommandStep1 newCompleteCommand(long jobKey)
      Description copied from interface: JobClient
      Command to complete a job.
       long jobKey = ..;
      
       jobClient
        .newCompleteCommand(jobKey)
        .variables(json)
        .send();
       

      If the job is linked to a process instance then this command will complete the related activity and continue the flow.

      Specified by:
      newCompleteCommand in interface JobClient
      Parameters:
      jobKey - the key which identifies the job
      Returns:
      a builder for the command
    • newCompleteCommand

      public CompleteJobCommandStep1 newCompleteCommand(ActivatedJob job)
      Description copied from interface: JobClient
      Command to complete a job.
       ActivatedJob job = ..;
      
       jobClient
        .newCompleteCommand(job)
        .variables(json)
        .send();
       

      If the job is linked to a process instance then this command will complete the related activity and continue the flow.

      Specified by:
      newCompleteCommand in interface JobClient
      Parameters:
      job - the activated job
      Returns:
      a builder for the command
    • newFailCommand

      public FailJobCommandStep1 newFailCommand(long jobKey)
      Description copied from interface: JobClient
      Command to mark a job as failed.
       long jobKey = ..;
      
       jobClient
        .newFailCommand(jobKey)
        .retries(3)
        .send();
       

      If the given retries are greater than zero then this job will be picked up again by a job subscription. Otherwise, an incident is created for this job.

      Specified by:
      newFailCommand in interface JobClient
      Parameters:
      jobKey - the key which identifies the job
      Returns:
      a builder for the command
    • newFailCommand

      public FailJobCommandStep1 newFailCommand(ActivatedJob job)
      Description copied from interface: JobClient
      Command to mark a job as failed.
       ActivatedJob job = ..;
      
       jobClient
        .newFailCommand(job)
        .retries(3)
        .send();
       

      If the given retries are greater than zero then this job will be picked up again by a job subscription. Otherwise, an incident is created for this job.

      Specified by:
      newFailCommand in interface JobClient
      Parameters:
      job - the activated job
      Returns:
      a builder for the command
    • newThrowErrorCommand

      public ThrowErrorCommandStep1 newThrowErrorCommand(long jobKey)
      Description copied from interface: JobClient
      Command to report a business error (i.e. non-technical) that occurs while processing a job.
       long jobKey = ...;
       String code = ...;
      
       jobClient
        .newThrowErrorCommand(jobKey)
        .errorCode(code)
        .send();
       

      The error is handled in the process by an error catch event. If there is no error catch event with the specified errorCode then an incident will be raised instead.

      Specified by:
      newThrowErrorCommand in interface JobClient
      Parameters:
      jobKey - the key which identifies the job
      Returns:
      a builder for the command
    • newThrowErrorCommand

      public ThrowErrorCommandStep1 newThrowErrorCommand(ActivatedJob job)
      Description copied from interface: JobClient
      Command to report a business error (i.e. non-technical) that occurs while processing a job.
       ActivatedJob job = ...;
       String code = ...;
      
       jobClient
        .newThrowErrorCommand(job)
        .errorCode(code)
        .send();
       

      The error is handled in the process by an error catch event. If there is no error catch event with the specified errorCode then an incident will be raised instead.

      Specified by:
      newThrowErrorCommand in interface JobClient
      Parameters:
      job - the activated job
      Returns:
      a builder for the command
    • newActivateJobsCommand

      public ActivateJobsCommandStep1 newActivateJobsCommand()
      Description copied from interface: JobClient
      Command to activate multiple jobs of a given type.
       jobClient
        .newActivateJobsCommand()
        .jobType("payment")
        .maxJobsToActivate(10)
        .workerName("paymentWorker")
        .timeout(Duration.ofMinutes(10))
        .send();
       

      The command will try to use maxJobsToActivate for given jobType. If less then the requested maxJobsToActivate jobs of the jobType are available for activation the returned list will have fewer elements.

      Specified by:
      newActivateJobsCommand in interface JobClient
      Returns:
      a builder for the command
    • newStreamJobsCommand

      public StreamJobsCommandStep1 newStreamJobsCommand()
      Description copied from interface: JobClient
      Activates and streams jobs of a specific type.
      
       final Consumer<ActivatedJob> consumer = ...; // do something with the consumed job
       final ZeebeFuture<StreamJobsResponse> stream = jobClient
        .newStreamJobsCommand()
        .jobType("payment")
        .consumer(consumer)
        .workerName("paymentWorker")
        .timeout(Duration.ofMinutes(10))
        .send();
      
        stream.whenComplete((ok, error) -> {
          // recreate stream if necessary
          // be careful if you've cancelled the stream explicitly to not recreate it if shutting down
        });
      
        // You can later terminate the stream by cancelling the future
        stream.cancel(true);
       

      Stream or Activate?

      As opposed to JobClient.newActivateJobsCommand(), which polls each partition until it has activated enough jobs or a timeout has elapsed, this command opens a long living stream onto which activated jobs are pushed. This typically results in lower latency, as jobs are activated and pushed out immediately, instead of waiting to be polled.

      Limitations

      This feature is still under development; as such, there is currently no way to rate limit how many jobs are streamed over a single call. This can be mitigated by opening more streams of the same type, which will ensure work is fairly load balanced.

      Additionally, only jobs which are created, retried, or timed out after the command has been registered will be streamed out. For older jobs, you must still use the JobClient.newActivateJobsCommand(). It's generally recommended that you use the JobWorker API to avoid having to coordinate both calls.

      Activation

      Jobs activated via this command will use the given worker name, activation time out, and fetch variables parameters in the same way as the JobClient.newActivateJobsCommand().

      Termination

      The stream can be explicitly cancelled by performing one of the following:

      NOTE: streams can be closed for various reasons - for example, the server is restarting. As such, it's recommended to add listeners to the resulting future to handle such cases and reopen streams if necessary.
      Specified by:
      newStreamJobsCommand in interface JobClient
      Returns:
      a builder for the command