我正在寻找一些简单的方法,可以在某些"事件"发生。
在我的简单案例中,"事件"可能是当任何消息沿着频道向下流动时,或者当某个消息流向某个频道时,我想将一些信息打印到日志文件中。
我知道目前有一个logging-channel-adapter
,但在刚刚描述的情况下,我需要能够定制自己的日志消息,而且我还需要某种计数器或跟踪事物的度量标准(因此适配器上的expression
不足以支持访问payload
但不授予对信道或流的信息。
我知道Spring Integration已经通过ManagedResources
和MetricType
以及ManagedMetric
向JMX公开了很多指标。
我还看过Russell"管理和监控Spring Integration Applications" YouTube视频多次:https://www.youtube.com/watch?v=TetfR7ULnA8
我意识到可以通过jmx-attribute-polling-channel-adapter
肯定有很多方法可以获得我所追求的目标。 几个例子:
然而,提供一些用户可以进入流程的组件可能会很有用,这些组件可以提供一些基本功能,以轻松满足我所描述的用例。
样本流程可能如下:
inbound-channel-adapter -> metric-logging-channel-interceptor -> componentY -> outbound-channel-adapter
非常高级别的此类组件可能看起来像logging-channel-adapter
和ChannelInterceptor
的混合,还有一些其他字段:
<int:metric-logging-channel-interceptor>
id=""
order=""
phase=""
auto-startup=""
ref=""
method=""
channel=""
outchannel=""
log-trigger-expression="(SendCount % 10) = 0"
level=""
logger-name=""
log-full-message=""
expression=""
/>
在实现需要保留一些基本统计数据的类中,我认为在messageChannel上公开的那些将是一个好的(即SendCount,MaxSendDuration等)。
log-trigger-expression
和expression
属性也需要访问内部计数器。
如果我已经描述过某些内容,或者我是否过于复杂,请告诉我。如果它当前不存在虽然我认为能够快速将组件放入流中而不必仅为了记录目的而编写自定义ServiceActivator
会带来好处。
答案 0 :(得分:0)
有趣的问题。您已经可以使用选择性线控器做类似的事情...
<si:publish-subscribe-channel id="seconds">
<si:interceptors>
<si:wire-tap channel="thresholdLogger" selector="selector" />
</si:interceptors>
</si:publish-subscribe-channel>
<bean id="selector" class="org.springframework.integration.filter.ExpressionEvaluatingSelector">
<constructor-arg
value="@mbeanServer.getAttribute('org.springframework.integration:type=MessageChannel,name=seconds', 'SendCount') > 5" />
</bean>
<si:logging-channel-adapter id="thresholdLogger" />
这里有几件事情......
selector-expression
,只支持selector
,所以我不得不使用对表达式评估选择器的引用。直接支持selector-expression
将是一项有用的改进。我可以在这看到一些潜在的改进。
selector-expression
。@channelName.sendCount > 5
。随意打开JIRA'改进'问题。
希望有所帮助。