public abstract class AbstractMappingMessageRouter extends AbstractMessageRouter implements MappingMessageRouterManagement
IntegrationManagement.ManagementOverrides
EXPRESSION_PARSER, logger
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
METER_PREFIX, RECEIVE_COUNTER_NAME, SEND_TIMER_NAME
Constructor and Description |
---|
AbstractMappingMessageRouter() |
Modifier and Type | Method and Description |
---|---|
protected Collection<MessageChannel> |
determineTargetChannels(Message<?> message)
Subclasses must implement this method to return a Collection of zero or more
MessageChannels to which the given Message should be routed.
|
protected abstract List<Object> |
getChannelKeys(Message<?> message)
Subclasses must implement this method to return the channel keys.
|
Map<String,String> |
getChannelMappings()
Returns an unmodifiable version of the channel mappings.
|
Collection<String> |
getDynamicChannelNames()
Provide a collection of channel names to which
we have routed messages where the channel was not explicitly mapped.
|
void |
removeChannelMapping(String key)
Remove a channel mapping for the given key if present.
|
void |
replaceChannelMappings(Properties channelMappings)
Convenience method allowing conversion of a list
of mappings in a control-bus message.
|
void |
setChannelKeyFallback(boolean channelKeyFallback)
When true (default), if a resolved channel key does not exist in the channel map,
the key itself is used as the channel name, which we will attempt to resolve to a
channel.
|
void |
setChannelMapping(String key,
String channelName)
Add a channel mapping from the provided key to channel name.
|
void |
setChannelMappings(Map<String,String> channelMappings)
Provide mappings from channel keys to channel names.
|
void |
setDynamicChannelLimit(int dynamicChannelLimit)
Set a limit for how many dynamic channels are retained (for reporting purposes).
|
void |
setPrefix(String prefix)
Specify a prefix to be added to each channel name prior to resolution.
|
void |
setResolutionRequired(boolean resolutionRequired)
Specify whether this router should ignore any failure to resolve a channel name to
an actual MessageChannel instance when delegating to the ChannelResolver strategy.
|
void |
setSuffix(String suffix)
Specify a suffix to be added to each channel name prior to resolution.
|
getComponentType, getDefaultOutputChannel, getIntegrationPatternType, getMessagingTemplate, getRequiredConversionService, handleMessageInternal, onInit, setApplySequence, setDefaultOutputChannel, setDefaultOutputChannelName, setIgnoreSendFailures, setSendTimeout
handleMessage, onComplete, onError, onNext, onSubscribe
buildSendTimer, destroy, getManagedName, getManagedType, getMetricsCaptor, getOrder, getOverrides, isLoggingEnabled, registerMetricsCaptor, sendTimer, setLoggingEnabled, setManagedName, setManagedType, setOrder, setShouldTrack, shouldTrack
afterPropertiesSet, extractTypeIfPossible, generateId, getApplicationContext, getApplicationContextId, getBeanDescription, getBeanFactory, getBeanName, getChannelResolver, getComponentName, getConversionService, getExpression, getIntegrationProperties, getIntegrationProperty, getMessageBuilderFactory, getTaskScheduler, isInitialized, setApplicationContext, setBeanFactory, setBeanName, setChannelResolver, setComponentName, setConversionService, setMessageBuilderFactory, setPrimaryExpression, setTaskScheduler, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getThisAs
getBeanName, getComponentName
@ManagedAttribute public void setChannelMappings(Map<String,String> channelMappings)
DestinationResolver
.setChannelMappings
in interface MappingMessageRouterManagement
channelMappings
- The channel mappings.public void setPrefix(String prefix)
prefix
- The prefix.public void setSuffix(String suffix)
suffix
- The suffix.public void setResolutionRequired(boolean resolutionRequired)
resolutionRequired
- true if resolution is required.public void setChannelKeyFallback(boolean channelKeyFallback)
channelKeyFallback
- false to disable the fall back.public void setDynamicChannelLimit(int dynamicChannelLimit)
NOTE: this does not affect routing, just the reporting which dynamically
resolved channels have been routed to. Default 100
.
dynamicChannelLimit
- the limit.getDynamicChannelNames()
@ManagedAttribute public Map<String,String> getChannelMappings()
getChannelMappings
in interface MappingMessageRouterManagement
@ManagedOperation public void setChannelMapping(String key, String channelName)
setChannelMapping
in interface MappingMessageRouterManagement
key
- The key.channelName
- The channel name.@ManagedOperation public void removeChannelMapping(String key)
removeChannelMapping
in interface MappingMessageRouterManagement
key
- The key.@ManagedAttribute public Collection<String> getDynamicChannelNames()
MappingMessageRouterManagement
Implementations may choose to return only the most recent channel names.
getDynamicChannelNames
in interface MappingMessageRouterManagement
protected abstract List<Object> getChannelKeys(Message<?> message)
message
- The message.protected Collection<MessageChannel> determineTargetChannels(Message<?> message)
AbstractMessageRouter
determineTargetChannels
in class AbstractMessageRouter
message
- The message.@ManagedOperation public void replaceChannelMappings(Properties channelMappings)
This is intended to be called via a control-bus; keys and values that are not Strings will be ignored.
Mappings must be delimited with newlines, for example:
"@'myRouter.handler'.replaceChannelMappings('foo=qux \n baz=bar')"
.
replaceChannelMappings
in interface MappingMessageRouterManagement
channelMappings
- The channel mappings.