Spring integration Spring集成-有条件的布线是否可行?
是否可以进行“有条件的”Spring integration Spring集成-有条件的布线是否可行?,spring-integration,Spring Integration,是否可以进行“有条件的”攻丝?如果是的话,有人能解释一下吗 下面是我的用例: 我在LDAP服务器中配置了一个属性(键值对)。此属性包含一个布尔值。 此外,我在配置中对各种直接通道进行了wire-tapping,以用于某些日志记录目的。导线抽头进行免提的通道是执行器通道;这是为了实现异步日志记录 现在,我的用例是,只有在LDAP服务器中定义的布尔属性为true的情况下,我才应该启用此wire-tap。否则,导线抽头不应发生 我想通过路由器来实现这一点,但却不知道该怎么做,因为有线抽头没有任何输入通
攻丝
?如果是的话,有人能解释一下吗
下面是我的用例:
我在LDAP服务器中配置了一个属性(键值对)。此属性包含一个布尔值。
此外,我在配置中对各种直接通道进行了wire-tapping
,以用于某些日志记录目的。导线抽头
进行免提的通道是执行器通道;这是为了实现异步日志记录
现在,我的用例是,只有在LDAP服务器中定义的布尔属性为true的情况下,我才应该启用此wire-tap。否则,导线抽头不应发生
我想通过路由器来实现这一点,但却不知道该怎么做,因为有线抽头
没有任何输入通道
非常感谢
致意
LB首先,有线点击是一种刚刚开始新消息流的模式,它从
频道开始
由于您说您想通过某种条件“窒息”导线抽头
流,因此在该流的开头放置
就足够了。大概是这样的:
<int:channel id="input">
<int:interceptors>
<int:wire-tap channel="logging"/>
</int:interceptors>
</int:channel>
<int:channel id="logging">
<int:dispatcher task-executor="executor"/>
</int:channel>
<int:filter input-channel="logging" output-channel="loggingProcess"
ref="ldapService" method="checkState"/>
对你合适吗?还是我遗漏了什么?用第一个订阅者(order=“1”
)作为过滤器,而不是用窃听器,制作input
apublish-subscribe频道
;然后在过滤器之后添加执行器通道
第二个订户将是您的主流(order=“2”
)
或;子类WireTap
并覆盖preSend
将过滤逻辑放在那里;如果通过,则调用super.preSend()
将自定义wiretap作为bean添加到拦截器中(而不是wiretap
)
编辑:
嗯,结果是电线接头已经有了这种能力
<channel id="accepting">
<interceptors>
<wire-tap channel="wireTapChannel" selector="mySelector"/>
</interceptors>
</channel>
…其中mySelector
是一个MessageSelector
bean-您只需实现accept
方法,并且只点击导致选择器返回true
的消息。因此,您可以在那里进行LDAP查找;可能会短时间缓存以避免过多开销
有时,我们甚至忘记了这个惊人框架的一些功能:)感谢您回复Artem。我同意上面的方法,它在一定程度上解决了我的查询…唯一的问题是..它将为执行者创建一个新任务。我希望我的支票是调用线程本身的一部分。换句话说,通道“输入”只有在满足条件时才应进行线抽头,否则不应。有可能吗?将执行者移动到loggingProcess
(或查看我的备选答案)。对于第一种方法,我可能会将我的许多直接频道更改为pub sub,因为我的有线电视监听使用“模式”截获了许多这些直接频道。此外,我的有线抽头不在单个通道上。第二种方法在我看来有些可行。只需要一个简单的说明-如何将自定义窃听作为bean添加到拦截器中?同样从这个用例来看,您认为在未来的SI发行版中是否可以为上的属性提供一个“新特性”,使其在运行时启用/禁用?编辑-wire tap已经具有此功能。作为将来的参考,您只需使用
上的
子元素来配置自定义拦截器。你们是向导!“选择器”方法的工作原理就像一个符咒……Tx Gary和Artem!:)看来你是个新手。如果答案解决了您的问题,通常会接受答案,以帮助其他用户解决类似问题。我知道这一点,并尝试在您的答案上单击“大”复选标记(多次),但没有任何效果。它不会变成绿色!编辑-刚刚再试一次,这次成功了..接受了你的答案..再次发送了很多次。