【问题标题】:Listen for Spring Integration TCP Connection events监听 Spring Integration TCP Connection 事件
【发布时间】:2019-11-28 07:17:32
【问题描述】:

我的目标是监听特定的 tcp 连接事件并使用它执行一些任务。

通过实现ApplicationEventPublisher,我可以看到正在触发的事件。

@Component
public class TestEventPublisher implements ApplicationEventPublisher {

   @Override
   public void publishEvent(Object event) {
       LOG.info("Event Fired - {}", event.getClass());
   }
}

INFO [globalTask​​Executor-2] 记录器 - 事件触发 - 类 org.springframework.integration.ip.tcp.connection.TcpConnectionOpenEvent

INFO [ThreadPoolTask​​Executor-3] 记录器 - 事件触发 - 类 org.springframework.integration.ip.tcp.connection.TcpConnectionCloseEvent

所以我为它添加了监听器,但它们没有被执行。

@Component
public class TestListeners {

   @EventListener(TcpConnectionOpenEvent.class)
   public void doSomethingWhenConnectionIsOpen() {
        LOG.info("----------------**************** CONNECTION OPEN EVENT FIRED ****************** -----------------------"); // No log shows up
    }

    @EventListener(TcpConnectionFailedEvent.class)
    public void doSomethingElseWhenConnectionFails() {
        LOG.info("----------------**************** CONNECTION ATTEMPT FAILED EVENT FIRED ****************** -----------------------"); // No Log shows up
    }

}

我做错了什么?

【问题讨论】:

    标签: spring spring-boot java-8 spring-integration


    【解决方案1】:

    您的发布者实际上并没有发布任何内容,它只是记录事件。

    要使用@EventListener,必须使用Spring提供的内置ApplicationEventPublisher(其实就是应用上下文)。

    TCP 组件实现了ApplicationEventPublisherAware,因此 Spring 会自动注入内置发布者(只要组件由 Spring 管理)。如果你想拦截发布,你的发布者必须实现ApplicationEventPublisherAware,记录事件,然后调用Spring提供的真正发布者。

    您还应该将事件参数添加到侦听器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-20
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 2013-03-26
      • 1970-01-01
      相关资源
      最近更新 更多