java-发送HL7消息后何时关闭并重新打开套接字
作者:互联网
我试图打开与HL7服务器的基本连接,并在其中发送请求并获得ACK响应.这将连续进行.
>如果连续进行此操作,什么时候可以关闭插槽?在这种情况下,我可以正确实现吗?
>如果我关闭插座,如何再次打开它? ConnectionHub的javadocs指示以下内容:
attach(java.lang.String host, int port, Parser parser,
java.lang.Class<? extends LowerLayerProtocol> llpClass)
Returns a Connection to the given address, opening this Connection if necessary.
但是,在现实生活中,如果已关闭,则不会打开新连接.
Patient patient = appt.getPatient();
Parser parser = new GenericParser();
Message hl7msg = parser.parse(wlp.getORMString(appt));
//Connect to listening servers
ConnectionHub connectionHub = ConnectionHub.getInstance();
// A connection object represents a socket attached to an HL7 server
Connection connection = connectionHub.attach(serverIP, serverPort,
new PipeParser(), MinLowerLayerProtocol.class);
if (!connection.isOpen()) {
System.out.println("CONNNECTION is CLOSED");
connection = connectionHub.attach(serverIP, serverPort, new PipeParser(),
MinLowerLayerProtocol.class);
if (!connection.isOpen()) {
System.out.println("CONNNECTION is still CLOSED");
}
}
Initiator initiator = connection.getInitiator();
Message response = initiator.sendAndReceive(hl7msg);
String responseString = parser.encode(response);
System.out.println("Received response:\n" + responseString);
connection.close();
结果:
第一遍完美进行,发送了请求并收到了ACK.对该方法的任何后续调用都会在客户端导致java.net.SocketException:“套接字关闭”.
如果我删除connection.close()调用,那么它将在一段时间内正常运行,然后套接字将自行关闭.
解决方法:
如果通过HL7 2.X进行通信,则套接字上的预期行为是永不断开连接-您分配连接并保持套接字处于活动状态.换句话说,HL7应用程序的行为不像Web浏览器,它在需要时进行连接并在完成后断开连接.相反,两端都可以保持插座连续连接.如果您断开连接,大多数应用程序都会感到烦恼.此外,大多数集成引擎都有警报,如果您断开连接时间过长,则会触发警报.
连接套接字后,您需要使用HL7最低下层协议(MLLP或MLP)来传达HL7 2.X内容.如果要发送数据,则应在发送下一条消息之前等待HL7确认.如果要接收数据,则应生成HL7确认.
参考文献:
MLP-http://www.hl7standards.com/blog/2007/05/02/hl7-mlp-minimum-layer-protocol-defined
脚垫-http://www.corepointhealth.com/resource-center/hl7-resources/hl7-acknowledgement
标签:sockets,hl7,java 来源: https://codeday.me/bug/20191105/1996573.html