弹簧集成 - 条件接线是否可行?

时间:2014-11-28 19:55:21

标签: spring-integration

是否可以进行“有条件的”wire-tapping?如果是的话,有人会对它有所了解吗?

以下是我的用例:

我在LDAP服务器中配置了属性(键值对)。此属性包含布尔值。 此外,我wire-tapping在我的配置中有各种直接通道用于某些记录目的。 wire-tap进行放手的频道是执行者频道;这是为了实现异步日志记录。

现在,我的用例是,只有在我的LDAP服务器中定义的布尔属性为true时,才应该使用此线程“启用”。否则wire-tap不应该发生。

我想通过路由器实现它,但由于wire-tap没有任何input-channel,因此无法确切地知道如何执行此操作。

非常感谢提前!

最诚挚的问候 LB

2 个答案:

答案 0 :(得分:1)

如果要使用第一个订阅者(input)作为过滤器,publish-subscribe-channelorder="1",而不是窃听;然后在过滤器之后添加执行程序通道?

第二个订阅者将是您的主要流程(order="2")。

或者;子类WireTap并覆盖preSend将过滤器逻辑放在那里;如果通过,则调用super.preSend()

将自定义窃听作为bean添加到拦截器(而不是wire-tap)。

修改

嗯,事实证明电线接头已具备此功能......

<channel id="accepting">
    <interceptors>
        <wire-tap channel="wireTapChannel" selector="mySelector"/>
    </interceptors>
</channel>

...其中mySelectorMessageSelector bean - 您只需实现accept方法,并且只会触发导致选择器返回true的消息。所以你可以在那里进行LDAP查找;可能会在短时间内缓存以避免过多的开销。

有时甚至我们忘记了这个惊人框架的一些功能:)

答案 1 :(得分:0)

首先wire-tap是一些模式,它只是启动一个新的消息流,从<wire-tap>的{​​{1}}开始。

既然你说你想要通过某种条件“窒息”channel流,那么就足以在该流的开头放置wire-tap。像这样:

<filter>

你可以吗?或者我错过了什么?