2010-11-29 53 views
3

我想开到哪里发送请求并获得ACK响应的HL7服务器的基本连接。这将不断完成。时关闭和HL7消息之后重新打开套接字发送

  1. 如果这是连续进行的,我什么时候关闭插座?在这种情况下,我是否正确实施了这个?
  2. 如果我关闭套接字,我如何再次打开它?对于ConnectionHub的javadoc说明如下:
attach(java.lang.String host, int port, Parser parser, 
     java.lang.Class<? extends LowerLayerProtocol> llpClass) 

返回一个连接到指定的地址,打开此连接,如果必要的。

但是,在现实生活中,如果它已经关闭,它不会打开新的连接。

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: Socket closed此方法将导致“任何后续调用的客户端。 如果我删除了connection.close()通话,那么它会在一定的时间内运行良好,则套接字将关闭本身。

回答

4

如果您是通过通信HL7 2.X,插座上的预期的行为是绝不断开 - 你分配的连接,并保持插座活跃换句话说,一个HL7应用确实行为像一个Web浏览器,其中它连接需要。和断开完成时,而是两端的工作,以保持持续连接插座,大多数应用将是生气,如果你断开连接。此外,大多数整合引擎有提醒,如果你断开时间过长,将触发。

连接套接字后,您需要使用HL7最低层协议(MLLP或MLP)来传递HL7 2.X内容。如果您要发送数据,则应在发送下一条消息之前等待HL7确认。如果您正在接收数据,您应该生成HL7 Ack。

参考文献:

MLP - http://www.hl7standards.com/blog/2007/05/02/hl7-mlp-minimum-layer-protocol-defined

的Ack - http://www.corepointhealth.com/resource-center/hl7-resources/hl7-acknowledgement

+0

感谢您的答复戴夫。 – don 2010-12-01 13:32:23

相关问题