Camel HL7 — ClosedChannelException при отправке ACK обратно клиенту

Я создаю прослушиватель HL7, используя netty4 и обрабатывая сообщения 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 и получаю ответ ACK.

Но я упаковываю это приложение в банку и помещаю его на свой сервер, а затем пытаюсь сделать

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

Я не получаю обратно ACK. Я получаю исключение для закрытого соединения.

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 [объявление №3 — WireTap] DEBUG WireTapProcessor — >>>> (прослушивание) direct:b Exchange[] 2018-03-09 14:41:09,839 [ServerTCPWorker] DEBUG NettyConsumer — Причина: [org.apache.camel.CamelExchangeException — Невозможно записать ответ на null. Exchange[ID-annan06-56620-1520559639101-0-2]. Причина: [java.nio.channels.ClosedChannelException - null]] org.apache.camel.CamelExchangeException: невозможно написать ответ на null. Exchange[ID-annan06-56620-1520559639101-0-2]. Вызвано: [java.nio.channels.ClosedChannelException - null] в org.apache.camel.component.netty4.handlers.ServerResponseFutureListener.operationComplete(ServerResponseFutureListener.java:54) в org.apache.camel.component.netty4.handlers. ServerResponseFutureListener.operationComplete(ServerResponseFutureListener.java:36) в io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:514) в io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:488) в io .netty.util.concurrent.DefaultPromise.access$000(DefaultPromise.java:34) в io.netty.util.concurrent.DefaultPromise$1.run(DefaultPromise.java:438) в io.netty.util.concurrent.AbstractEventExecutor.safeExecute (AbstractEventExecutor.java:163) в io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418) в io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:440) в io.netty. но il.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) в java.lang.Thread.run(Thread.java:748) Вызвано: java.nio.channels.ClosedChannelException в io.netty.channel.AbstractChannel$AbstractUnsafe .write(...)(Неизвестный источник)


person Chidambaram Palaniappan    schedule 09.03.2018    source источник


Ответы (1)


Это сработало. Это не удалось, потому что netcat немедленно закрывал соединение. Поставил «netcat -i 5 localhost», чтобы netcat подождал 5 секунд и успешно получил обратно ACK.

person Chidambaram Palaniappan    schedule 09.03.2018