当前位置: 首页 > 知识库问答 >
问题:

spring一体化--有条件的窃听可能吗?

井学
2023-03-14

是否可以进行“有条件的”窃听?如果是的话,有人能给我们一些启示吗?

下面是我的用例:

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

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

我曾想过通过路由器实现它,但不知道如何实现,因为wire-tap没有任何input-channel

提前多谢!

向LB问好

共有1个答案

松锐藻
2023-03-14

不如将input设置为publish-subscribe-channel而不是窃听,其中第一个订阅者(order=“1”)是筛选器;然后在筛选器之后添加executor通道?

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

或;子类wiretap并重写presend将筛选逻辑放在那里;如果通过,则调用super.presend()

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

编辑:

嗯,原来窃听器已经有这个能力了...

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

...其中myselector是一个messageSelectorbean-您只需实现accept方法,并且只有导致选择器返回true消息才会被访问。以便您可以在那里进行LDAP查找;可能缓存很短的时间以避免过多的开销。

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

 类似资料:
  • 我正在使用带有Apache骆驼的Spring Boot。我正在从控制器调用路由。一旦路由完成,控制就会返回控制器。我正在VerifyLimitProcess和批准限制处理器中生成响应。如果我没有在路由中提供窃听配置,控制器会按预期检索标头和正文。但如果我在路由中引入窃听,控制器会将标头和正文接收为null。如果有人指出我需要做什么,以便我可以在选择语句中引入两个处理器的窃听配置,即VerifyLi

  • 创建N个数据库 为每个数据库创建数据库用户 为每个数据库运行liquibase迁移 远程服务器只能通过ssh访问,而liquibase不支持ssh隧道(据我所知),也没有用于liquibase的ansible模块。 在运行上述任务之前,似乎有一种奇怪的方法: 为mysql创建正向/反向通道, 创建N个数据库 为每个数据库创建数据库用户 为每个数据库运行liquibase迁移 杀死隧道。 但我不确定

  • 问题内容: 如何选择一组行,其中每一行都匹配不同的条件? 例子: 假设我有一个带有名为name的列的表,仅在第一行名称匹配“ A”,第二行名称匹配“ B”且第三行名称匹配“ C”的情况下,才需要结果。 编辑: 我想这样做是为了工作,没有固定的尺寸,但在某种程度上,我可以这样定义的序列,,,,和它的序列,每一个连续的匹配,但顺序。 问题答案: 假定您知道如何为行提供行号(例如,SQL Server中

  • 我有一个基于Spring的Java应用程序,其中许多类使用以下自动生成的接口... 现在,接口只有一个实现,如下所示: 应用程序的工作原理与预期一致。Spring是快乐的。大家都很高兴。好吧,不是每个人。。。 所以,我想添加另一个具体的实现... 我们需要的是IOperatingSystemManager根据属性文件设置有条件地自动连接。(比如说..os=windows..基本上是一个任意字符串,

  • 问题内容: 有没有一种方法可以有条件地声明Spring bean: 不必使用配置文件,这将很有用。我没有特定的用例,但这是我想到的。 问题答案: 你可以使用@Conditional从spring4或@ConditionalOnProperty从springBoot.。 Using Spring4 (only) 如果你不使用Spring Boot,这可能会过大。 首先,创建一个类,在其中可以访问:

  • 我正在编写我的第一个Pyplay游戏。我试图进行冲突检测,但有时会奏效- 我尝试使用实际上我使用 这是我的碰撞代码: 我除了当我触摸尖峰,启动功能,但只是有时工作。