侦听 Spring 集成 TCP 连接事件

Listen for Spring Integration TCP Connection events

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

通过实施 ApplicationEventPublisher,我可以看到事件触发。

@Component
public class TestEventPublisher implements ApplicationEventPublisher {

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

INFO [globalTaskExecutor-2] logger - Event Fired - class org.springframework.integration.ip.tcp.connection.TcpConnectionOpenEvent

INFO [ThreadPoolTaskExecutor-3] logger - Event Fired - class 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
    }

}

我做错了什么?

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

为了使用 @EventListener,您必须使用 Spring 提供的内置 ApplicationEventPublisher(实际上是应用程序上下文)。

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

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