第 58 章 HL7
HL7 组件用于使用 HAPI 库 来处理 HL7 MLLP 协议和 HL7 v2 消息。
这个组件支持以下组件:
Maven 用户需要将以下依赖项添加到此组件的 pom.xml
中:
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hl7</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
58.1. HL7 MLLP 协议
HL7 通常与 HL7 MLLP 协议一起使用,该协议是基于文本的基于 TCP 套接字的协议。此组件附带了 Mina 和 Netty Codec,它符合 MLLP 协议,以便您可以轻松地通过 TCP 传输层公开 HL7 侦听器。要公开 HL7 侦听器服务,camel-mina 或 link:camel-netty 组件与 HL7MLLPCodec (mina)或 HL7MLLPNettyDecoder/HL7MLLPNettyEncoder (Netty)一起使用。
HL7 MLLP codec 可以配置如下:
名称 | 默认值 | 描述 |
---|---|---|
|
| 跨越 HL7 有效负载的开始字节。 |
|
| 跨越 HL7 有效负载的第一个最终字节。 |
|
| 跨越 HL7 有效负载的第二端字节。 |
| JVM 默认值 | 用于 codec 的编码( charset name)。如果没有提供,Camel 将使用 JVM 默认Charset。 |
|
| 如果为 true,则 codec 使用定义的 charset 创建一个字符串。如果为 false,则 codec 将纯文本数组发送到路由,以便 HL7 数据格式可以确定 HL7 消息内容的实际字符集。 |
|
|
会将 |
58.1.1. 使用 Mina 公开 HL7 侦听器
在 Spring XML 文件中,我们配置 mina 端点,以使用端口 8888
上的 TCP 侦听 HL7 请求:
<endpoint id="hl7MinaListener" uri="mina:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
sync=true 表示此监听程序是同步的,因此会将 HL7 响应返回给调用者。HL7 codec 使用 codec=#hl7codec 设置。请注意,hl7codec
只是一个 Spring bean ID,因此可以命名为 mygreatcodecforhl7
或任何内容。codec 也在 Spring XML 文件中设置:
<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec"> <property name="charset" value="iso-8859-1"/> </bean>
然后,端点 hl7MinaLlistener 可以在作为消费者的路由中使用,因为此 Java DSL 示例演示了:
from("hl7MinaListener") .bean("patientLookupService");
这是一个非常简单的路由,它将侦听 HL7 并将其路由到名为 patient LookupService 的服务。这也是 Spring XML 中的 Spring bean ID,如下所示:
<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>
业务逻辑可以在不依赖于 Camel 的 POJO 类中实施,如下所示:
import ca.uhn.hl7v2.HL7Exception; import ca.uhn.hl7v2.model.Message; import ca.uhn.hl7v2.model.v24.segment.QRD; public class PatientLookupService { public Message lookupPatient(Message input) throws HL7Exception { QRD qrd = (QRD)input.get("QRD"); String patientId = qrd.getWhoSubjectFilter(0).getIDNumber().getValue(); // find patient data based on the patient id and create a HL7 model object with the response Message response = ... create and set response data return response }
58.1.2. 使用 Netty 公开 HL7 侦听器(可从 Camel 2.15 开始提供)
在 Spring XML 文件中,我们配置 netty 端点,以使用端口 8888
上的 TCP 侦听 HL7 请求:
<endpoint id="hl7NettyListener" uri="netty:tcp://localhost:8888?sync=true&encoders=#hl7encoder&decoders=#hl7decoder"/>
sync=true 表示此监听程序是同步的,因此会将 HL7 响应返回给调用者。HL7 codec 是带有 encoders=#hl7encoder*and*decoders=#hl7decoder 的设置。请注意,hl7encoder
和 hl7 解码器
只是 bean ID,因此它们可能会以不同的方式被命名。Bean 可以在 Spring XML 文件中设置:
<bean id="hl7decoder" class="org.apache.camel.component.hl7.HL7MLLPNettyDecoderFactory"/> <bean id="hl7encoder" class="org.apache.camel.component.hl7.HL7MLLPNettyEncoderFactory"/>
然后,端点 hl7NettyListener 可以在作为消费者的路由中使用,因为此 Java DSL 示例演示了:
from("hl7NettyListener") .bean("patientLookupService");