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
a
publish-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!:)看来你是个新手。如果答案解决了您的问题,通常会接受答案,以帮助其他用户解决类似问题。我知道这一点,并尝试在您的答案上单击“大”复选标记(多次),但没有任何效果。它不会变成绿色!编辑-刚刚再试一次,这次成功了..接受了你的答案..再次发送了很多次。