消息事件

时间:2017-09-26 09:56:16

标签: spring tcp spring-integration

我在Spring Integration中实现了一个简单的TCP连接工厂:

@Bean
@ServiceActivator(inputChannel = "toTcpChannel")
public TcpSendingMessageHandler tcpOutClient() throws Exception {
    TcpSendingMessageHandler sender = new TcpSendingMessageHandler();
    sender.setConnectionFactory(clientFactory());
    sender.setClientMode(false);
    sender.afterPropertiesSet();
    return sender;
}

@Bean
public AbstractClientConnectionFactory clientFactory() {
    final TcpNioClientConnectionFactory factory = new TcpNioClientConnectionFactory(tcpHost, tcpPort);
    factory.setSingleUse(true);
    return factory;
}

@EventListener
public void handleTcpConnectionOpenEvent(TcpConnectionOpenEvent event) throws Exception {           
LOGGER.info("TCP connection OPEN event: {}", event.getConnectionId());
// HERE I would like to have "myCustomID" header here. 
}

我正在寻找获取我在生产的TcpConnectionOpenEvent(或类似的拦截器)中通过Gateway提供的自定义ID

@Gateway(requestChannel="toTcpChannel")
public void sendToTcp(@Payload String message, @Header("myCustomID") Long myCustomID);

我知道这是一个事件而不是消息,但我知道如何以任何其他方式获取我将在输入通道中收到的连接ID。

我正在创建一种my custom id – connection id的哈希映射。 我不能通过聚合器使用自定义关联,因为响应消息将不包含有关先前发送的消息的任何信息。欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

哦!我知道了。不确定您要在自定义TcpSendingMessageHandler中执行的操作,但只要ApplicationEventPublisher是单线程的,您可以将connectionId存储在ThreadLocal变量中并获取发送操作后从那里开始。