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

Spring Integration TCP-在发送数据之前用消息启动握手

尉迟彬
2023-03-14

为了向我的服务器发送数据,我需要在连接启动时发送握手消息。如果来自服务器的响应是我期望的握手响应,那么我发送有意义的数据。我最初的解决方案是

if(gateway.HANDSHAKE(HANDSHAKE).equals(HANDSHAKE_RESPONSE))gateway.senddata(data);

当我扩大规模时,这就不太好了,因为我通过tcp调用的次数增加了一倍,因为我只需要在连接启动时发送send handshake,而不是每次都发送send handshake。此外,我计划保持连接的活力。

@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();
}

共有1个答案

江亮
2023-03-14

请参见连接拦截器。

可以通过对TCPConnectionInterceptorFactoryChain的引用来配置连接工厂。拦截器可用于向连接添加行为,如协商、安全和其他设置。框架目前没有提供拦截器,但请参见源存储库中的InterceptedSharedConnectionTests。

测试用例中使用的HelloWorldInterceptor的工作方式如下:

 类似资料:
  • 我在骡子流中使用CXF JAX-WS来访问服务。 我能够成功访问它。 是否有任何方法可以在发送之前看到正在发送到服务的消息?

  • 接口说明 轻推轻应用/订阅号支持发送文本、图片、文本卡片、图文、key-value、文件、待办等消息类型。本接口针对各种消息类型和发送的对象(单发、群发以及给部分人发送)进行了定义。 注:openid是用户关注某个轻应用/订阅号后生成的唯一id,单发和给部分人发送消息必须携带此参数,可以通过如下接口来获取: 根据qt_code获取用户基本信息 获取使用者列表 通过userId获取openid 消息

  • 主动发送消息 use EasyWeChat\Kernel\Messages\TextCard; // 获取 Messenger 实例 $messenger = $app->messenger; // 准备消息 $message = new TextCard([ 'title' => '你的请假单审批通过', 'description' => '单号:1928373, ...

  • 向已经创建连接凭据的设备发送消息数据。 请求方式: |4|2|3|message|\r 参数 message 发送的消息内容 返回值: "|4|2|3|1|\r" 发送成功 "|4|2|3|2|\r" 发送失败 Arduino样例: softSerial.print("|4|2|3|DFRobot|\r");

  • 我正在使用BackoffSupervisor策略来创建一个必须处理某些消息的子参与者。我想实现一个非常简单的重启策略,其中在发生异常时: > 子级将失败消息传播给主管 supervisor重新启动子程序并再次发送失败消息。 主管重试3次后放弃 这给出了类似于以下输出的内容: 但是没有来自钩子的日志

  • 问题内容: 所以我有一个应用程序,它运行着以Socket.io作为后端的节点js,以普通javascript作为前端的应用程序。我的应用程序有一个登录系统,当前该系统只是让客户端在连接后立即发送其登录数据。 现在,我认为将登录数据与handhakeData一起发送会更好,因此我可以直接让用户在连接时登录(而不是在建立连接之后),或者在登录数据无效时分别拒绝授权。 我认为最好将其他数据放在hands