Spring Integration 反序列化器未通过 TCP 获取整个消息

问题描述 投票:0回答:1

我们正在使用 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

但是我们需要将其作为一个整体来获取,需要进行哪些更改,您可以指导我吗?

spring-integration
1个回答
0
投票

首先,您的流程看起来不像请求-回复:您从

Tcp.inboundGateway()
开始,但随后您以
void
中的
MessageHandle
结束流程。这样您就不会产生任何回复来满足请求-回复要求。看看这是否真的是你所期望的。

然后关于

.deserializer(TcpCodecs.lengthHeader1())
:您需要确保另一端的 TCP 客户端执行完全相反的操作并使用相同的算法序列化消息。

© www.soinside.com 2019 - 2024. All rights reserved.