是否可以进行“有条件的”wire-tapping
?如果是的话,有人会对它有所了解吗?
以下是我的用例:
我在LDAP服务器中配置了属性(键值对)。此属性包含布尔值。
此外,我wire-tapping
在我的配置中有各种直接通道用于某些记录目的。 wire-tap
进行放手的频道是执行者频道;这是为了实现异步日志记录。
现在,我的用例是,只有在我的LDAP服务器中定义的布尔属性为true时,才应该使用此线程“启用”。否则wire-tap
不应该发生。
我想通过路由器实现它,但由于wire-tap
没有任何input-channel
,因此无法确切地知道如何执行此操作。
非常感谢提前!
最诚挚的问候 LB
答案 0 :(得分:1)
如果要使用第一个订阅者(input
)作为过滤器,publish-subscribe-channel
为order="1"
,而不是窃听;然后在过滤器之后添加执行程序通道?
第二个订阅者将是您的主要流程(order="2"
)。
或者;子类WireTap
并覆盖preSend
将过滤器逻辑放在那里;如果通过,则调用super.preSend()
。
将自定义窃听作为bean添加到拦截器(而不是wire-tap
)。
修改强>
嗯,事实证明电线接头已具备此功能......
<channel id="accepting">
<interceptors>
<wire-tap channel="wireTapChannel" selector="mySelector"/>
</interceptors>
</channel>
...其中mySelector
是MessageSelector
bean - 您只需实现accept
方法,并且只会触发导致选择器返回true
的消息。所以你可以在那里进行LDAP查找;可能会在短时间内缓存以避免过多的开销。
有时甚至我们忘记了这个惊人框架的一些功能:)
答案 1 :(得分:0)
首先wire-tap
是一些模式,它只是启动一个新的消息流,从<wire-tap>
的{{1}}开始。
既然你说你想要通过某种条件“窒息”channel
流,那么就足以在该流的开头放置wire-tap
。像这样:
<filter>
你可以吗?或者我错过了什么?