第 149 章 HL7 DataFormat
从 Camel 版本 2.0 开始提供
HL7 组件用于使用 HL7 MLLP 协议和 HL7 v2 消息 (利用 HAPI 库 )。
这个组件支持以下内容:
- Mina的 HL7 MLLP codec
- 用于 Camel 2.15 以后 Netty4 的 HL7 MLLP codec
- 键入 Converter from/to HAPI 和 String
- 使用 HAPI 库的 HL7 DataFormat
- 更加易于使用,因为它与 camel-mina2 组件集成在一起。
Maven 用户需要将以下依赖项添加到这个组件的 pom.xml
中:
149.1. HL7 MLLP 协议 复制链接链接已复制到粘贴板!
HL7 通常与 HL7 MLLP 协议一起使用,该协议是基于文本的 TCP 套接字协议。此组件附带一个 Mina 和 Netty4 Codec,它符合 MLLP 协议,以便您可以轻松地公开接受 TCP 传输层上的 HL7 请求的 HL7 侦听器。要公开 HL7 侦听器服务,camel-mina2 或 camel-netty4 组件与 HL7MLLPCodec
(mina2)或 HL7MLLPNettyDecoder/HL7MLLPNettyEncoder
(Netty4)一起使用。
HL7 MLLP codec 可以配置如下:
Name | 默认值 | 描述 |
---|---|---|
|
| 跨越 HL7 有效负载的开始字节。 |
|
| 跨越 HL7 有效负载的第一个结束字节。 |
|
| 跨越 HL7 有效负载的第 2 个结束字节。 |
| JVM 默认 | 用于 codec 的编码( charset 名称)。如果没有提供,Camel 将使用 JVM 默认 Charset。 |
|
| (自 Camel 2.14.1) 如果为 true,codec 会使用定义的 charset 创建一个字符串。如果为 false,则 codec 会将一个普通字节数组发送到路由中,以便 HL7 Data Format 可以确定 HL7 消息内容的实际 charset。 |
|
|
将 |
149.1.1. 使用 Mina 公开 HL7 侦听器 复制链接链接已复制到粘贴板!
在 Spring XML 文件中,我们将 mina2 端点配置为使用 TCP 在端口 8888
上侦听 HL7 请求:
<endpoint id="hl7MinaListener" uri="mina2:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
<endpoint id="hl7MinaListener" uri="mina2:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
sync=true 表示此监听程序是同步的,因此会向调用者返回 HL7 响应。HL7 codec 使用 codec= problemhl7codec 设置。请注意,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>
<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");
from("hl7MinaListener")
.bean("patientLookupService");
这是一个非常简单的路由,它将侦听 HL7,并将其路由到名为 patient LookupService 的服务。这也是 Spring XML 中配置的 Spring bean ID:
<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>
<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>
业务逻辑可以在不依赖于 Camel 的 POJO 类中实施,如下所示:
149.1.2. 使用 Netty 公开 HL7 侦听器(自 Camel 2.15 起可用) 复制链接链接已复制到粘贴板!
在 Spring XML 文件中,我们将 netty4 端点配置为使用 TCP 在端口 8888
上侦听 HL7 请求:
<endpoint id="hl7NettyListener" uri="netty4:tcp://localhost:8888?sync=true&encoder=#hl7encoder&decoder=#hl7decoder"/>
<endpoint id="hl7NettyListener" uri="netty4:tcp://localhost:8888?sync=true&encoder=#hl7encoder&decoder=#hl7decoder"/>
sync=true 表示此监听程序是同步的,因此会向调用者返回 HL7 响应。HL7 codec 使用 encoder="hl7encoder*and*decoder="hl7decoder 进行设置。请注意,hl7encoder
和 hl7decoder
只是 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"/>
<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");
from("hl7NettyListener")
.bean("patientLookupService");