You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Apache Camel处理MLLP确认?接收ACK超时该如何解决?

解决方案

导致这个超时的核心原因是MLLP消费者没有正确返回ACK报文给生产者,仅设置MLLP_ACKNOWLEDGEMENT_TYPE属性不足以触发自动ACK返回,你可以按照以下方案修改:

方案1:显式生成并返回ACK报文(最稳妥)

修改消费者路由,直接把ACK作为消息体返回,不需要依赖自动ACK机制:

@Component
public class Consumer extends RouteBuilder {
    @Override
    public void configure() {
        from(mllp("localhost:4444"))
                .log("received")
                .unmarshal(new HL7DataFormat())
                .log("unmarshalled")
                // 直接生成ACK作为消息体返回,替换之前的setProperty配置
                .transform(ack(AcknowledgmentCode.AA))
                .log("responding")
                .end();
    }
}

方案2:调整自动ACK相关配置

如果你希望用设置属性的方式实现自动ACK,需要确保消费者端点开启了autoAck参数(3.x版本默认是开启,但部分场景下可能被覆盖):

@Component
public class Consumer extends RouteBuilder {
    @Override
    public void configure() {
        from(mllp("localhost:4444?autoAck=true"))
                .log("received")
                .unmarshal(new HL7DataFormat())
                .log("unmarshalled")
                .setProperty(MLLP_ACKNOWLEDGEMENT_TYPE, constant(AcknowledgmentCode.AA.name()))
                .log("responding")
                .end();
    }
}

方案3:调整生产者超时时间

如果是你的业务处理逻辑耗时较长导致ACK返回超时,可以调大生产者端的ACK超时阈值:

@Component
public class Producer extends RouteBuilder {
    @Override
    public void configure() {
        from("direct:hl7-recipient")
                .marshal(new HL7DataFormat())
                // 单位是毫秒,这里调整为15秒超时,可根据实际业务调整
                .to(mllp("localhost:4444?ackTimeout=15000"))
                .end();
    }
}

内容的提问来源于stack exchange,提问作者SomeDevDoingStuff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:06:00