我正在使用 @MessagingGateway 将数据发送到服务器。我为出站网关配置了 AbstractClientConnectionFactory 和 @ServiceActivator。
为了将数据发送到我的服务器,我需要在启动连接时发送握手消息。如果服务器的响应是我期望的握手响应,那么我会发送有意义的数据。我最初的解决方案是
if (gateway.handshake(HANDSHAKE).equals(HANDSHAKE_RESPONSE))
gateway.sendData(data);
当我扩展时,这不太好,因为我通过 tcp 的调用增加了一倍,因为我只需要在连接启动时发送发送握手,而不是每次都发送。另外,我计划保持联系。
那么在连接启动时,如何实现此自定义握手?
@Bean
public AbstractClientConnectionFactory clientCF() {
TcpNetClientConnectionFactory tcpNetClientConnectionFactory = new TcpNetClientConnectionFactory(host, port);
tcpNetClientConnectionFactory.setSerializer(new serializerDeserializer());
tcpNetClientConnectionFactory.setDeserializer(new serializerDeserializer());
tcpNetClientConnectionFactory.setSoKeepAlive(true);
tcpNetClientConnectionFactory.setSoTimeout(soTimeout);
return tcpNetClientConnectionFactory;
}
@Bean
@ServiceActivator(inputChannel = "toTcp")
public MessageHandler tcpOutGate(AbstractClientConnectionFactory connectionFactory) {
TcpOutboundGateway gate = new TcpOutboundGateway();
gate.setConnectionFactory(connectionFactory);
return gate;
}
@Bean
public MessageChannel fromTcp() {
return new DirectChannel();
}
See 连接拦截器 https://docs.spring.io/spring-integration/reference/html/ip.html#ip-interceptors.
连接工厂可以通过引用 TcpConnectionInterceptorFactoryChain 来配置。拦截器可用于向连接添加行为,例如协商、安全性和其他设置。该框架当前未提供拦截器,但有关示例,请参阅源存储库中的 InterceptedSharedConnectionTests。
测试用例中使用的HelloWorld拦截器工作原理如下:
...
虽然框架中没有标准的拦截器,但有展示如何使用它们进行初始握手的测试用例,例如此处 https://github.com/spring-projects/spring-integration/blob/master/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/TcpSendingMessageHandlerTests.java#L904
and here https://github.com/spring-projects/spring-integration/blob/master/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/InterceptedSharedConnectionTests.java.
这些测试比您需要的更复杂,因为它们测试多个嵌套拦截器。
The 你好世界测试拦截器 https://github.com/spring-projects/spring-integration/blob/master/spring-integration-ip/src/test/java/org/springframework/integration/ip/tcp/connection/HelloWorldInterceptor.java#L35 send Hello
并期望World!
当套接字第一次打开时。他们为客户端和服务器端实现握手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)