Class DefaultMessageMonitorRegistry
- All Implemented Interfaces:
DescribableComponent,MessageMonitorRegistry
DefaultMessageMonitorRegistry is a default implementation of the MessageMonitorRegistry interface
responsible for managing and providing components of MessageMonitor for various message types such as
CommandMessage, EventMessage, and QueryMessage.
This class allows registering monitor builders for each message type and resolves those monitors into properly
initialized components when required. If no custom monitors are registered for a specific type, default
implementations like NoOpMessageMonitor are returned to ensure no operational interruptions.
Internally, it maintains separate lists of ComponentDefinition to store the registered monitor builders for
command, event, and query messages. It also supports registering a generic MessageMonitor for
Message, in which case a specialized MessageMonitor is created for each of the supported subtypes.
- Since:
- 5.0.0
- Author:
- Jan Galinski
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionMessageMonitor<? super CommandMessage> commandMonitor(Configuration config) Retrieves aMessageMonitordedicated for monitoringCommandMessageprocessing.voiddescribeTo(ComponentDescriptor descriptor) Describe the properties ofthis DescribableComponentwith the givendescriptor.MessageMonitor<? super EventMessage> eventMonitor(Configuration config) Retrieves aMessageMonitorspecifically designed to monitor the processing ofEventMessageinstances.MessageMonitor<? super QueryMessage> queryMonitor(Configuration config) Retrieves aMessageMonitorfor monitoring the processing ofQueryMessageinstances.registerCommandMonitor(ComponentBuilder<MessageMonitor<? super CommandMessage>> monitorBuilder) Registers aMessageMonitorspecifically for monitoring the processing ofCommandMessageinstances.registerEventMonitor(ComponentBuilder<MessageMonitor<? super EventMessage>> monitorBuilder) Registers aMessageMonitorspecific forEventMessagetypes using the supplied monitor builder.registerMonitor(ComponentBuilder<MessageMonitor<Message>> monitorBuilder) Registers aMessageMonitorfor genericMessagetypes using the supplied monitor builder.registerQueryMonitor(ComponentBuilder<MessageMonitor<? super QueryMessage>> monitorBuilder) registerSubscriptionQueryUpdateMonitor(ComponentBuilder<MessageMonitor<? super SubscriptionQueryUpdateMessage>> monitorBuilder) Registers aMessageMonitorspecifically forSubscriptionQueryUpdateMessagetypes using the providedComponentBuilder.Retrieves aMessageMonitorfor monitoring the processing ofSubscriptionQueryUpdateMessageinstances.
-
Constructor Details
-
DefaultMessageMonitorRegistry
public DefaultMessageMonitorRegistry()
-
-
Method Details
-
registerMonitor
@Nonnull public MessageMonitorRegistry registerMonitor(@Nonnull ComponentBuilder<MessageMonitor<Message>> monitorBuilder) Description copied from interface:MessageMonitorRegistryRegisters aMessageMonitorfor genericMessagetypes using the supplied monitor builder. The registered monitor will be added to the registry and can be used for monitoring message processing.- Specified by:
registerMonitorin interfaceMessageMonitorRegistry- Parameters:
monitorBuilder- theComponentBuilderresponsible for creating theMessageMonitorinstance for genericMessagetypes- Returns:
- the updated MessageMonitorRegistry instance for fluent configuration
-
registerEventMonitor
@Nonnull public MessageMonitorRegistry registerEventMonitor(@Nonnull ComponentBuilder<MessageMonitor<? super EventMessage>> monitorBuilder) Description copied from interface:MessageMonitorRegistryRegisters aMessageMonitorspecific forEventMessagetypes using the supplied monitor builder. The registered monitor can be utilized for monitoring event message processing.- Specified by:
registerEventMonitorin interfaceMessageMonitorRegistry- Parameters:
monitorBuilder- theComponentBuilderresponsible for creating theMessageMonitorinstance forEventMessagetypes- Returns:
- the updated MessageMonitorRegistry instance, allowing fluent configuration
-
registerCommandMonitor
@Nonnull public MessageMonitorRegistry registerCommandMonitor(@Nonnull ComponentBuilder<MessageMonitor<? super CommandMessage>> monitorBuilder) Description copied from interface:MessageMonitorRegistryRegisters aMessageMonitorspecifically for monitoring the processing ofCommandMessageinstances. The providedComponentBuilderis responsible for creating theMessageMonitor.- Specified by:
registerCommandMonitorin interfaceMessageMonitorRegistry- Parameters:
monitorBuilder- theComponentBuilderused to create theMessageMonitorinstance forCommandMessagetypes.- Returns:
- the updated MessageMonitorRegistry instance, allowing for a fluent configuration approach.
-
registerQueryMonitor
@Nonnull public MessageMonitorRegistry registerQueryMonitor(@Nonnull ComponentBuilder<MessageMonitor<? super QueryMessage>> monitorBuilder) Description copied from interface:MessageMonitorRegistryRegisters aMessageMonitorspecifically forQueryMessagetypes using the providedComponentBuilder. The registered monitor will be utilized for monitoring query message processing and is added to the registry.- Specified by:
registerQueryMonitorin interfaceMessageMonitorRegistry- Parameters:
monitorBuilder- theComponentBuilderresponsible for creating theMessageMonitorforQueryMessagetypes- Returns:
- the updated MessageMonitorRegistry instance, allowing for fluent configuration
-
registerSubscriptionQueryUpdateMonitor
@Nonnull public MessageMonitorRegistry registerSubscriptionQueryUpdateMonitor(@Nonnull ComponentBuilder<MessageMonitor<? super SubscriptionQueryUpdateMessage>> monitorBuilder) Description copied from interface:MessageMonitorRegistryRegisters aMessageMonitorspecifically forSubscriptionQueryUpdateMessagetypes using the providedComponentBuilder. The registered monitor will be utilized for monitoring subscription query update message processing and is added to the registry.- Specified by:
registerSubscriptionQueryUpdateMonitorin interfaceMessageMonitorRegistry- Parameters:
monitorBuilder- theComponentBuilderresponsible for creating theMessageMonitorforSubscriptionQueryUpdateMessagetypes- Returns:
- the updated MessageMonitorRegistry instance, allowing for fluent configuration
-
commandMonitor
Description copied from interface:MessageMonitorRegistryRetrieves aMessageMonitordedicated for monitoringCommandMessageprocessing.- Specified by:
commandMonitorin interfaceMessageMonitorRegistry- Parameters:
config- theConfigurationinstance used to create theMessageMonitorinstances- Returns:
MultiMessageMonitorcomposed of all registeredMessageMonitors, orNoOpMessageMonitor.
-
eventMonitor
Description copied from interface:MessageMonitorRegistryRetrieves aMessageMonitorspecifically designed to monitor the processing ofEventMessageinstances.- Specified by:
eventMonitorin interfaceMessageMonitorRegistry- Parameters:
config- theConfigurationinstance used to create or retrieve theMessageMonitorinstances- Returns:
MultiMessageMonitorcomposed of all registeredMessageMonitors, orNoOpMessageMonitor.
-
queryMonitor
Description copied from interface:MessageMonitorRegistryRetrieves aMessageMonitorfor monitoring the processing ofQueryMessageinstances.- Specified by:
queryMonitorin interfaceMessageMonitorRegistry- Parameters:
config- theConfigurationused to create or retrieve theMessageMonitorforQueryMessagetypes- Returns:
MultiMessageMonitorcomposed of all registeredMessageMonitors, orNoOpMessageMonitor.
-
subscriptionQueryUpdateMonitor
public MessageMonitor<? super SubscriptionQueryUpdateMessage> subscriptionQueryUpdateMonitor(@Nonnull Configuration config) Description copied from interface:MessageMonitorRegistryRetrieves aMessageMonitorfor monitoring the processing ofSubscriptionQueryUpdateMessageinstances.- Specified by:
subscriptionQueryUpdateMonitorin interfaceMessageMonitorRegistry- Parameters:
config- theConfigurationused to create or retrieve theMessageMonitorforSubscriptionQueryUpdateMessagetypes- Returns:
MultiMessageMonitorcomposed of all registeredMessageMonitors, orNoOpMessageMonitor.
-
describeTo
Description copied from interface:DescribableComponentDescribe the properties ofthis DescribableComponentwith the givendescriptor.Components should call the appropriate
describePropertymethods on the descriptor to register their properties. The descriptor is responsible for determining how these properties are formatted and structured in the final output.Best Practices: As a general rule, all relevant fields of a
DescribableComponentimplementation should be described in this method. However, developers have discretion to include only the fields that make sense in the context. Not every field may be meaningful for description purposes, especially internal implementation details. Furthermore, components might want to expose different information based on their current state. The final decision on what properties to include lies with the person implementing thedescribeTomethod, who should focus on providing information that is useful for understanding the component's configuration and state.Example implementation:
public void describeTo(ComponentDescriptor descriptor) { descriptor.describeProperty("name", this.name); descriptor.describeProperty("enabled", this.enabled); descriptor.describeProperty("configuration", this.configuration); // A nested component descriptor.describeProperty("handlers", this.eventHandlers); // A collection }- Specified by:
describeToin interfaceDescribableComponent- Parameters:
descriptor- The component descriptor to describethis DescribableComponentn its properties in.
-