Camel HL7 - 在将ACK发送回客户端

时间:2018-03-09 01:58:57

标签: apache-camel netty hl7 spring-camel

我正在使用netty4构建HL7侦听器并处理HL7消息。一旦成功处理,就会发回ACK。

 from("hl7NettyListener") 
      .routeId("route_hl7listener")
        .startupOrder(997)
          .unmarshal()
           .hl7(false)               
           .to("direct:a");



    from("direct:a") 
        .doTry()
            .to("bean:processHL7?method=process")        
        .doCatch(HL7Exception.class)
            .to("direct:ErrorACK")
            //.transform(ack())
            .stop()
        .end()
        .transform(ack())       
        .wireTap("direct:b");

这在我当地的日食中运作良好。我发了一条HL7消息,然后我回来了。

但是我把这个应用程序打包到一个jar中并把它放在我的服务器上,然后尝试做一个

cat example.hl7 | netcat localhost 4444 (to fire a HL7 message to port 4444 on linux env)

我没有得到回复。我得到了一个关闭连接例外。

DEBUG NettyConsumer - 频道:[id:0xdf13b06b,L:0.0.0.0/0.0.0.0:4444]写体:MSH | ^〜\& | Karisma || Kestral | Kestral | 20180309144109.827 + 1300 || ACK ^ R01 | 701 || 2.3.1 2018-03-09 14:41:09,838 [ad#3 - WireTap] DEBUG WireTapProcessor - >>>> (窃听)直接:b交换[] 2018-03-09 14:41:09,839 [ServerTCPWorker] DEBUG NettyConsumer - 引起:[org.apache.camel.CamelExchangeException - 无法写入对null的响应。交换[ID-annan06-56620-1520559639101-0-2]。引起:[java.nio.channels.ClosedChannelException - null]] org.apache.camel.CamelExchangeException:无法写入对null的响应。交换[ID-annan06-56620-1520559639101-0-2]。引起:[java.nio.channels.ClosedChannelException - null]         at org.apache.camel.component.netty4.handlers.ServerResponseFutureListener.operationComplete(ServerResponseFutureListener.java:54)         at org.apache.camel.component.netty4.handlers.ServerResponseFutureListener.operationComplete(ServerResponseFutureListener.java:36)         at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:514)         在io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:488)         at io.netty.util.concurrent.DefaultPromise.access $ 000(DefaultPromise.java:34)         at io.netty.util.concurrent.DefaultPromise $ 1.run(DefaultPromise.java:438)         at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163)         在io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:418)         在io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:440)         at io.netty.util.concurrent.SingleThreadEventExecutor $ 5.run(SingleThreadEventExecutor.java:873)         在java.lang.Thread.run(Thread.java:748) 引起:java.nio.channels.ClosedChannelException         在io.netty.channel.AbstractChannel $ AbstractUnsafe.write(...)(未知来源)

1 个答案:

答案 0 :(得分:1)

那很有用。它失败了,因为netcat立即关闭了连接。已经为netcat设置了“netcat -i 5 localhost”等待5秒并成功收到了ACK。