使用 HL7DFDLInput 节点可以使用基于 TCP/IP 的 MLLP 协议接收来自与代理相连接的客户端的消息。
HL7DFDLInput 节点对一个端口进行侦听,客户端套接字连接到该端口时,服务器套接字将为该客户端创建连接。打开连接后,接收数据记录时,配置的定界符出现即表明检测到记录结束。如果读取数据时发生错误,例如等待数据时发生超时或者等待完整记录时连接关闭,那么会将该数据发送到 Failure 终端。如果未连接 Failure 终端,那么将抛出异常。如果此节点的重试机制属性未设置为故障,那么此节点将进行尝试,直到成功检索到数据或者超出重试阈值属性所定义的重试次数为止。
HL7DFDLInput 节点要求消息使用基于 TCP/IP 的 MLLP 协议。如果 MLLP 前导字节不存在,那么消息将发送到 Failure 终端。
HL7DFDLInput 节点处理 DFDL 域中定义的消息。使用 DFDL 消息模型中的 HL7 消息格式来解析消息。如果发生解析错误,或者必需的 MSH 字段不存在,那么该消息将传递到 Failure 终端。有关消息模型的信息,请参阅 位于 IBM® Integration Bus 产品文档中消息模型。
可以将 HL7DFDLInput 节点配置为检查是否存在重复消息。每条入局 HL7 消息在 MSH 头段中都有一个 MessageControlID 字段,用于标识记录。如果选中了检查重复属性,那么所有标识都将存储在重复队列中,并向发送方返回应答 (ACK)。系统根据保存的标识来检查入局消息的标识,以确定其是否重复。检测到重复后,不对其进行处理,而是向发送方返回针对第一条消息发送的应答。重复队列作为一个节点属性指定。
在重复队列中存储标识的持续时间由重复时间段属性定义。此持续时间过后,将删除这些标识,并且不再将具有同一标识的消息视为重复。您必须调整重复队列的大小,使其能够包含设定时间段内的预期高峰消息标识数。
如果入局消息不重复,那么该消息将传递到 HL7DFDLInput 节点的 Out 终端以进行进一步处理。如果检测到重复,那么 HL7DFDLInput 节点将向请求者返回 ACK。如果选择了报告重复,并检测到重复,那么会将该消息传递到 Failure 终端。
消息在事务控制之下进行处理。如果消息流回滚,那么将除去那些添加到重复标识队列中的重复标识。这样就可以确保重新提交消息时,不会将其识别为重复,从而将其作为新消息进行处理。
有关 HL7 的信息,请参阅 Health Level Seven International。
HL7DFDLInput 节点包含在消息流节点选用板的 Healthcare 抽屉中,在 IBM Integration Toolkit 中由以下图标表示:
在消息流中使用 HL7DFDLInput 节点时,传递到 Out 终端的消息包含经过解析并除去了前导和尾部 MLLP 字节的 HL7 消息。消息树包含 MQMD 和 MQRFH2 头,因此有需要时,可以将消息直接写入队列。消息主体在 DFDL 域中包含 HL7 消息。消息流负责向请求者返回应答 (ACK)。
如果 HL7DFDLInput 节点中发生故障,那么消息将传递到 Failure 终端。LocalEnvironment.HL7 包含以下“环境”表中显示的字段。这些字段提供用于构建否定应答 (NACK) 或创建错误消息的信息。
字段 | 描述 |
---|---|
FlowMilestoneReached | 指示发生错误时执行的操作。 |
SendNACK | 发送否定应答 (NACK) 响应。 |
EndConnection | YES:关闭连接。
NO:不关闭连接。 |
HL7RC | HL7 返回码。 |
ErrorCondition | 要包括在 NACK 中的错误文本。 |
如果 EndConnection 设置为 YES,那么必须关闭连接。如果入局消息未包含正确的 MLLP 定界符,因此假定不支持 MLLP 协议,那么将执行此操作。
提供了 HL7RC(HL7 返回码)和 ErrorCondition 字段,用于在向请求者返回的 NACK 中提供信息。
到达流里程碑 | 返回码 | 错误文本 |
---|---|---|
DETECTDUPLICATE | AR | 检查重复出错 |
PARSE | AE | 显示了 DFDL 解析错误消息。此消息对问题进行了概括。 |
BUILDACK | AR | 构建 ACK 消息出错。
(由于消息重复而返回 ACK 时,将发生此错误)。 |
SENDACK | AR | 构建 ACK 消息出错
(由于消息重复而返回 ACK 时,将发生此错误)。 |
DUPLICATEERROR | AR | 检测重复期间发生故障。重复队列已满。
检测重复期间发生故障。消息处理失败。 |
SAVINGDUPDATA | AR | 保存重复数据时出错 |
DUPLICATE RECORD | AR | 检测到重复记录 |
HL7DFDLInput 节点是事务性节点。使用了此节点的消息流成功结束时,将落实在当前事务期间编写的所有消息。如果消息由于未捕获的异常而结束,那么在当前事务期间编写的所有消息(包括当前消息)都将回滚。这包括那些写入用于保存标识以便检测重复的队列的消息。您必须确定这些情况下要回滚的消息,并确保当前事务期间不写入其他消息(例如错误消息)。
将 HL7DFDLInput 节点的实例添加到消息流后,可以对其进行配置。
所有必须输入值(未定义缺省值)的必需属性均以星号标记。
终端 | 描述 |
---|---|
Failure | 这是发生错误时消息所路由到的输出终端。 |
Out | 这是从外部资源中成功检索到消息后该消息所路由到的输出终端。 |
Catch | 这是下游抛出异常,并且该异常被此节点捕获时,消息所路由到的输出终端。只有在连接了此终端后,才能捕捉到异常。 |
下表描述了此节点的属性。标题为 M 的列指示属性是否为必需(如果在未定义缺省值时必须输入值,那么将以星号标记);标题为 C 的列指示属性是否可配置(将消息流添加到代理归档 (BAR) 文件以进行部署时,可以更改该属性的值)。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
节点名 | 是 | 否 | HL7DFDLInput | 节点的名称。 |
简短描述 | 否 | 否 | 节点的简要描述。 | |
详细描述 | 否 | 否 | 描述消息流中节点用途的文本。 |
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
检查重复 | 否 | 否 | 未选中 | 确定是否检测重复消息,重复与否由 HL7 MSH 头中的唯一消息标识确定。
如果检测到重复,那么将执行下列操作:
|
报告重复 | 否 | 是 | 选中 | 确定在指定时间内到达的重复消息是否生成错误通知消息。 |
重复时间段 | 否 | 是 | 86400 | 定义在到期前保留消息标识的时间长度(以秒计)。此时间段过后,将不会识别重复消息,而是正常地对其进行处理。缺省值 (86400) 相当于 24 小时。
如果选中了检查重复,那么此属性必需。 |
重复标识队列 | 否 | 否 | 定义一个队列,用于存放当前重复标识的列表,系统将根据这些标识对入局消息进行检查。
如果选中了检查重复,那么此属性必需。 |
|
前导 MLLP 字节 | 是 | 否 | 0B | 定义前导字节,此字节是 MLLP 协议的组成部分,在解析并处理消息前,将除去此字节。 |
发送应答 | 否 | 是 | 选中 | 确定检测到重复消息时是否发送应答消息。 |
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
连接详细信息 | 是 | 是 | 1111 | 源应用程序的 TCP/IP 连接,格式为 主机名:端口 |
等待数据记录超时(秒) | 是 | 是 | 60 | 这是第一个数据字节到达后节点对连接进行侦听以获取更多数据的时间长度。您可以指定以秒为单位的任意时间长度。缺省值为 60 秒。超出指定时间后,所有可用数据都将发送到 Failure 终端。 |
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
定界符 | 是 | 否 | 定制定界符 | 此属性不可编辑。 |
结尾 MLLP 字节 | 是 | 是 | 1C0D | 这是用作 HL7 记录定界符的结尾 MLLP 字节。HL7DFDLInput 节点将除去这些结尾 MLLP 字节。 |
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
重试机制 | 是 | 否 | 短重试时间间隔(秒) | 节点如何处理流故障。有效选项有:
|
短重试时间间隔(秒) | 是 | 是 | 0 | 重试阈值不为零时,两次短重试之间的时间间隔(秒)。 |
重试阈值 | 是 | 是 | 0 | 这是重试机制为短重试时间间隔(秒)时重试流事务的次数。 |
长重试时间间隔(秒) | 是 | 是 | 300 | 这是重试机制为短重试和长重试且超出重试阈值后,两次重试之间的时间间隔。 |