Class SchedulingInterceptor

java.lang.Object
io.fluxcapacitor.javaclient.scheduling.SchedulingInterceptor
All Implemented Interfaces:
DispatchInterceptor, HandlerDecorator, HandlerInterceptor

public class SchedulingInterceptor extends Object implements DispatchInterceptor, HandlerInterceptor
Intercepts scheduled messages to handle periodic scheduling logic.

This interceptor enables powerful scheduling features such as:

  • Initial scheduling of @Periodic types: When a handler method or its parameter type is annotated with Periodic, this interceptor will automatically initialize the schedule at startup if autoStart=true.
  • Rescheduling on success or failure: Upon successful or failed invocation of a scheduled handler, this interceptor can reschedule the next invocation based on the result or according to cron/delay rules.
  • Metadata injection: Adds the scheduleId metadata to outgoing scheduled messages to support correlation and rescheduling.
  • Dynamic behavior based on handler return value: Supports dynamic rescheduling based on return types like TemporalAmount, TemporalAccessor, Schedule, or even a replacement payload object.

Additionally, if the scheduled handler throws a CancelPeriodic exception, the schedule is permanently cancelled without logging an error.

This interceptor is registered automatically with FluxCapacitor.

See Also:
  • Constructor Details

    • SchedulingInterceptor

      public SchedulingInterceptor()
  • Method Details

    • wrap

      Description copied from interface: HandlerInterceptor
      Wraps a Handler with this interceptor, producing an intercepted handler.
      Specified by:
      wrap in interface HandlerDecorator
      Specified by:
      wrap in interface HandlerInterceptor
      Parameters:
      handler - the original handler to wrap
      Returns:
      an intercepted handler that applies this interceptor to all handled messages
    • initializePeriodicSchedule

      protected void initializePeriodicSchedule(Class<?> payloadType, Periodic periodic)
    • firstDeadline

      protected Instant firstDeadline(Periodic periodic, Instant now)
    • nextDeadline

      protected Instant nextDeadline(Periodic periodic, Instant now)
    • interceptDispatch

      public Message interceptDispatch(Message message, MessageType messageType, String topic)
      Description copied from interface: DispatchInterceptor
      Intercepts the dispatch of a message before it is serialized and published or locally handled.

      You may modify the message or return null to block dispatching. Throwing an exception also prevents dispatching.

      Specified by:
      interceptDispatch in interface DispatchInterceptor
      Parameters:
      message - the message to be dispatched
      messageType - the type of the message (e.g., COMMAND, EVENT, etc.)
      topic - the target topic or null if not applicable
      Returns:
      the modified message, the same message, or null to prevent dispatch
    • interceptHandling

      public Function<DeserializingMessage,Object> interceptHandling(Function<DeserializingMessage,Object> function, HandlerInvoker invoker)
      Description copied from interface: HandlerInterceptor
      Intercepts the message handling logic.

      The function parameter represents the next step in the handling chain— typically the actual message handler. The invoker provides metadata and invocation logic for the underlying handler method.

      Within this method, an interceptor may:

      • Modify the DeserializingMessage before passing it to the handler
      • Bypass the handler entirely and return a value directly
      • Wrap the result after the handler is invoked

      Note: Interceptors may return a different DeserializingMessage, but it must be compatible with a handler method in the same target class. If no suitable handler is found, an exception will be thrown.

      Specified by:
      interceptHandling in interface HandlerInterceptor
      Parameters:
      function - the next step in the handler chain (typically the handler itself)
      invoker - the metadata and execution strategy for the actual handler method
      Returns:
      a decorated function that wraps handling behavior
    • handleResult

      protected Object handleResult(Object result, DeserializingMessage schedule, Instant now, Periodic periodic)
    • handleExceptionalResult

      protected Object handleExceptionalResult(Throwable result, DeserializingMessage schedule, Instant now, Periodic periodic)