我们正在使用 Spring 集成流程连接到 Tcp 端口并获取消息。 在下面找到相同的代码。
@Bean
public IntegrationFlow integrationFlow() {
return IntegrationFlows.from(Tcp.inboundGateway(Tcp.nioServer(port)
//.deserializer(new HL7Deserializer())
.deserializer(TcpCodecs.lengthHeader1())
.serializer(TcpCodecs.lengthHeader1())
))
.transform(Transformers.objectToString())
.channel("testChannel")
.get();
}
@Bean
public IntegrationFlow testingChannnel() {
return IntegrationFlows.from("testChannel")
.handle("messageHandler", "handleMessage")
.get();
}
@Component
public class MessageHandle implements MessageHandler {
@Override
public void handleMessage(Message<?> message) {
String payload = message.getPayload().toString();
System.out.println("Received message: " + payload);
}
}
输入讯息:
MSH^~|&^HTAPPL^200TSQA~SQA-供应商~DNS^DG 家庭远程医疗^613~SQA-VA~DNS^20170530223011^^ACK~A04^200 TSQAApplication320170530223011^T^2.4^^^AL^NE^美国^ MSA^AA^613申请120170530223005^^^^0~留言已接受^
虽然反序列化没有获取整个消息,但我们正在有效负载中逐部分获取它。
在脱轨消息下方找到:
收到消息:MSH^~|&^HT 收到消息:PPL^200TSQA~SQA-VENDOR~DNS^DG HOME TELEHEALTH^613~SQA-VA~DNS^2017 收到消息:530223011^^ACK~A04^200 TSQAApplication3201705302 收到消息:3011^T^2.4^^^AL^NE^USA^ MSA^AA^613申请12017
但是我们需要将其作为一个整体来获取,需要进行哪些更改,您可以指导我吗?
首先,您的流程看起来不像请求-回复:您从
Tcp.inboundGateway()
开始,但随后您以 void
中的 MessageHandle
结束流程。这样您就不会产生任何回复来满足请求-回复要求。看看这是否真的是你所期望的。
然后关于
.deserializer(TcpCodecs.lengthHeader1())
:您需要确保另一端的 TCP 客户端执行完全相反的操作并使用相同的算法序列化消息。