【问题标题】:Create TCP client to send and receive in spring boot application在 Spring Boot 应用程序中创建 TCP 客户端以发送和接收
【发布时间】:2019-05-14 13:02:48
【问题描述】:

我应该与遗留系统交互,我必须使用 java/kotlin 中的 spring-integration 设置 TCP 客户端,以向 TCP 系统发送消息并接收其响应,解析此响应并将其发送给其他客户端通过 REST。我浏览了许多文档和博客,其中介绍了如何通过 xml 进行操作。无法为所有内容找到相应的注释。任何代码 sn-p 都会很有帮助。

@Service
class MyService{

@Autowired
MyGateway gateway;

public String callTCPClient(String msg){
    return gateway.exchange(msg);
}

}
interface MyGateway{
String exchange (String msg)
}

【问题讨论】:

  • 请参阅this answer 了解客户端和服务器的 DSL 示例。
  • @GaryRussell 我看到了你的帖子。我没明白几件事。如果我错了,请纠正我,我创建了一个接口并将其标记为网关(MyGateway.java),这样当我们调用该接口方法时,spring 知道它必须将该消息发送给客户端。我在您的代码中不明白的是,当我们收到客户端的响应时,它本身正在转换那里的代码。如果我有更复杂的转换,我该怎么办?如果我想调用位于单独服务类中的方法怎么办?你能简单地给我解释一下吗?
  • @GaryRussell 还有我如何告诉入站网关监听我通过出站网关发送的请求的响应?
  • 看我的回答;我不明白您第二条评论中的问题。
  • @GaryRussell 我在第二条评论中的意思是,当我们声明一个服务器连接来接收响应时,如何告诉它监听刚刚通过 TCP 客户端发送的请求的响应?在 spring 文档中给出了'出站通道适配器使用客户端连接工厂,但您也可以提供对客户端连接工厂的引用到入站通道适配器。该适配器接收在出站适配器创建的连接上接收到的任何传入消息。您能告诉我如何实现这一目标吗?

标签: spring-boot tcp spring-integration spring-integration-dsl


【解决方案1】:

如该答案所示,您可以在收到回复后做任何您想做的事情...

@Bean
public IntegrationFlow client() {
    return IntegrationFlows.from(MyGateway.class)
            .handle(Tcp.outboundGateway(
                Tcp.netClient("localhost", 1234)
                    .serializer(codec()) // default is CRLF
                    .deserializer(codec()))) // default is CRLF
            .transform(Transformers.objectToString()) // byte[] -> String
            .get();
}

在这种情况下,我们只是将字节数组转换为字符串,但您可以对其执行任何您想要的操作,例如JSON 到对象。您可以根据需要添加任意数量的步骤 - 添加 .handle(...) 元素以调用任意方法。阅读Spring Integration Reference Manual

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 2017-07-17
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多