Interface DispatchInterceptor

All Known Implementing Classes:
AdhocDispatchInterceptor, AuthenticatingInterceptor, CorrelatingInterceptor, DataProtectionInterceptor, MessageRoutingInterceptor, SchedulingInterceptor, WebResponseCompressingInterceptor, WebsocketResponseInterceptor
Functional Interface:
This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.

@FunctionalInterface public interface DispatchInterceptor
Mechanism that enables modification, monitoring, or conditional suppression of messages before they are dispatched to local handlers or published to the Flux platform.

A DispatchInterceptor allows observing and transforming messages during the dispatch process. It is typically used to inject metadata, rewrite payloads, log outgoing messages, or prevent dispatching certain messages based on custom rules.

Key behaviors:

See Also:
  • Field Details

    • noOp

      static final DispatchInterceptor noOp
      No-op implementation of the DispatchInterceptor that returns the original message unchanged.
  • Method Details

    • interceptDispatch

      Message interceptDispatch(Message message, MessageType messageType, String topic)
      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.

      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
    • modifySerializedMessage

      default SerializedMessage modifySerializedMessage(SerializedMessage serializedMessage, Message message, MessageType messageType, String topic)
      Allows modifications to the serialized representation of the message before it is actually published.

      This is called after interceptDispatch(io.fluxcapacitor.javaclient.common.Message, io.fluxcapacitor.common.MessageType, java.lang.String) and should not be used to block dispatching — use interceptDispatch(io.fluxcapacitor.javaclient.common.Message, io.fluxcapacitor.common.MessageType, java.lang.String) for that purpose instead.

      Parameters:
      serializedMessage - the serialized form of the message
      message - the deserialized message object
      messageType - the message type
      topic - the target topic
      Returns:
      the modified or original SerializedMessage
    • monitorDispatch

      default void monitorDispatch(Message message, MessageType messageType, String topic)
      Hook to observe the dispatch of a message. This method is called after all interceptors have had a chance to block or modify the message.

      Use this for logging or metrics, but not to alter or block the message.

      Parameters:
      message - the final message about to be handled or published
      messageType - the type of the message
      topic - the topic to which the message is dispatched (can be null)
    • andThen

      default DispatchInterceptor andThen(DispatchInterceptor nextInterceptor)
      Chains this interceptor with another. The resulting interceptor applies this one first, then the next one.
      Parameters:
      nextInterceptor - the interceptor to run after this one
      Returns:
      a new DispatchInterceptor representing the combined logic