Camel HL7 - 将 ACK 发送回客户端时出现 ClosedChannelException
Camel HL7 - ClosedChannelException while sending ACK back to the client
我正在使用 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");
这在我的本地 eclipse 中运行良好。我发出一条 HL7 消息,然后收到一个 ACK。
但是我将这个应用程序打包成一个 jar 并将其放在我的服务器上,然后尝试做一个
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。交易所[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]
在 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.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(...)(未知来源)
成功了。它失败了,因为 netcat 立即关闭了连接。已为 netcat 设置“netcat -i 5 localhost”等待 5 秒并成功收到 ACK。
我正在使用 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");
这在我的本地 eclipse 中运行良好。我发出一条 HL7 消息,然后收到一个 ACK。
但是我将这个应用程序打包成一个 jar 并将其放在我的服务器上,然后尝试做一个
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。交易所[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] 在 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.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(...)(未知来源)
成功了。它失败了,因为 netcat 立即关闭了连接。已为 netcat 设置“netcat -i 5 localhost”等待 5 秒并成功收到 ACK。