Interface DispatchInterceptor
- All Known Implementing Classes:
AdhocDispatchInterceptor, AuthenticatingInterceptor, CorrelatingInterceptor, DataProtectionInterceptor, DisableMetrics, MessageRoutingInterceptor, RecursivePublicationGuard, 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.
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.
Implementations can also be registered via Java's
invalid reference
ServiceLoaderTestFixture, and are ordered using @Order.
Key behaviors:
interceptDispatch(Message, MessageType, String)is used for altering or blocking a message before it's handled or published.modifySerializedMessage(SerializedMessage, Message, MessageType, String)can change the final serialized message before it's stored or sent to the Fluxzero Runtime.monitorDispatch(Message, MessageType, String, String, boolean)is a post-processing hook for monitoring without side effects or blocking.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final List<DispatchInterceptor> Default dispatch interceptors discovered via Java's service loader, sorted byOrder.static final DispatchInterceptorNo-op implementation of theDispatchInterceptorthat returns the original message unchanged. -
Method Summary
Modifier and TypeMethodDescriptiondefault DispatchInterceptorandThen(DispatchInterceptor nextInterceptor) Chains this interceptor with another.interceptDispatch(Message message, MessageType messageType, String topic) Intercepts the dispatch of a message before it is serialized and published or locally handled.default MessageinterceptDispatch(Message message, MessageType messageType, String topic, String namespace) Intercepts a dispatch to a specific namespace.default SerializedMessagemodifySerializedMessage(SerializedMessage serializedMessage, Message message, MessageType messageType, String topic) Allows modifications to the serialized representation of the message before it is actually published.default voidmonitorDispatch(Message message, MessageType messageType, String topic, String namespace, boolean request) Hook to observe the dispatch of a message.default PreparedLocalDispatchprepareLocalDispatch(LocalDispatchDescriptor descriptor) Prepares this interceptor for repeated local dispatches with the same static message characteristics.default DispatchInterceptorwithNamespace(String namespace) Returns a view that supplies the given namespace when callers use the namespace-agnostic dispatch method.
-
Field Details
-
defaultInterceptors
Default dispatch interceptors discovered via Java's service loader, sorted byOrder. These interceptors are applied automatically by Fluxzero. -
noOp
No-op implementation of theDispatchInterceptorthat returns the original message unchanged.
-
-
Method Details
-
interceptDispatch
Intercepts the dispatch of a message before it is serialized and published or locally handled.You may modify the message or return
nullto block dispatching. Throwing an exception also prevents dispatching.- Parameters:
message- the message to be dispatchedmessageType- 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
nullto prevent dispatch
-
interceptDispatch
default Message interceptDispatch(Message message, MessageType messageType, String topic, String namespace) Intercepts a dispatch to a specific namespace.The default implementation delegates to the namespace-agnostic method so existing interceptors retain their behavior. Interceptors that access namespace-sensitive resources can override this method.
- Parameters:
message- the message to be dispatchedmessageType- the type of the messagetopic- the target topic ornullnamespace- the target namespace ornullfor the application namespace- Returns:
- the modified message, the same message, or
nullto prevent dispatch
-
withNamespace
Returns a view that supplies the given namespace when callers use the namespace-agnostic dispatch method. Other dispatch hooks continue to delegate to this interceptor.- Parameters:
namespace- the namespace to attach to dispatch interception- Returns:
- a namespace-bound view of this interceptor
-
prepareLocalDispatch
Prepares this interceptor for repeated local dispatches with the same static message characteristics.This optional method lets local handling apply an interceptor without creating a complete
Messagefirst. Implementations must preserve the observable behavior ofinterceptDispatch(Message, MessageType, String). Returnnullwhen that is not possible; Fluxzero will then use the regular dispatch path for this payload type.The returned policy may be cached and used concurrently. State belonging to a single dispatch must be stored in the supplied
LocalExecution, not in the policy itself.- Parameters:
descriptor- payload class, message type, and topic shared by the local dispatches- Returns:
- a thread-safe prepared policy, or
nullto use regular message-based 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(Message, MessageType, String)and should not be used to block dispatching — useinterceptDispatch(Message, MessageType, String)for that purpose instead.- Parameters:
serializedMessage- the serialized form of the messagemessage- the deserialized message objectmessageType- the message typetopic- the target topic- Returns:
- the modified or original
SerializedMessage
-
monitorDispatch
default void monitorDispatch(Message message, MessageType messageType, String topic, String namespace, boolean request) 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 publishedmessageType- the type of the messagetopic- the topic to which the message is dispatched (can be null)namespace- the namespace to which the message is dispatched (can be null)request- whether the sender expects a response to this dispatch
-
andThen
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
DispatchInterceptorrepresenting the combined logic
-