148장. HL7 DataFormat
Camel 버전 2.0에서 사용 가능
HL7 구성 요소는 H API 라이브러리 를 사용하여 HL7 MLLP 프로토콜 및 HL7 v2 메시지 와 함께 사용됩니다.
이 구성 요소는 다음을 지원합니다.
- Mina용 HL7 MLLP codec
- Camel 2.15 이후 Netty4 용 HL7 MLLP codec
- /에서 HAPI 및 String으로 변환기를 입력합니다.
- HL7 DataFormat HAPI 라이브러리 사용
- camel-mina2 구성 요소와 잘 통합되어 더욱 편리합니다.
Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml
에 추가해야 합니다.
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-hl7</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
148.1. HL7 MLLP 프로토콜
HL7은 종종 텍스트 기반 TCP 소켓 기반 프로토콜인 HL7 MLLP 프로토콜과 함께 사용됩니다. 이 구성 요소는 MLLP 프로토콜을 준수하는 Mina 및 Netty4 Codec와 함께 제공되므로 TCP 전송 계층을 통해 HL7 요청을 수락하는 HL7 리스너를 쉽게 노출할 수 있습니다. HL7 리스너 서비스를 공개하기 위해 camel-mina2 또는 camel-netty4 구성 요소는 HL7MLLPCodec
(mina2) 또는 HL7MLLPNettyDecoder/HL7MLNettyEncoder (Netty
4)와 함께 사용됩니다.
HL7 MLLP 코덱은 다음과 같이 구성할 수 있습니다.
이름 | 기본값 | 설명 |
---|---|---|
|
| HL7 페이로드에 대한 시작 바이트입니다. |
|
| HL7 페이로드에 대한 첫 번째 엔드 바이트입니다. |
|
| HL7 페이로드를 포괄하는 두 번째 엔드포인트입니다. |
| JVM 기본값 | 코덱에 사용할 인코딩( charset 이름)입니다. 제공되지 않는 경우 Camel은 JVM 기본 요금을 사용합니다. |
|
| ( Camel 2.14.1로) true인 경우 codec는 정의된 charset을 사용하여 문자열을 생성합니다. false인 경우 codec는 일반 바이트 배열을 경로로 보내 HL7 데이터 형식이 HL7 메시지 콘텐츠에서 실제 charset을 결정할 수 있도록 합니다. |
|
|
는 |
148.1.1. Mina를 사용하여 HL7 리스너 노출
Spring XML 파일에서 포트 8888
의 TCP를 사용하여 HL7 요청을 수신 대기하도록 mina2 끝점을 구성합니다.
<endpoint id="hl7MinaListener" uri="mina2:tcp://localhost:8888?sync=true&codec=#hl7codec"/>
sync=true 는 이 리스너가 동기임을 나타내며 이에 따라 HL7 응답을 호출자에게 반환합니다. HL7 코덱은 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을 수신하고 patientLookupService 라는 서비스로 라우팅하는 매우 간단한 경로입니다. 이는 Spring XML에서 다음과 같이 구성된 Spring 빈 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 }
148.1.2. Netty를 사용하여 HL7 리스너 노출 ( Camel 2.15 이후에서 사용 가능)
Spring XML 파일에서는 포트 8888
의 TCP를 사용하여 HL7 요청을 수신 대기하도록 netty4 끝점을 구성합니다.
<endpoint id="hl7NettyListener" uri="netty4:tcp://localhost:8888?sync=true&encoder=#hl7encoder&decoder=#hl7decoder"/>
sync=true 는 이 리스너가 동기임을 나타내며 이에 따라 HL7 응답을 호출자에게 반환합니다. HL7 codec는 인코더=#hl7encoder*and*decoder=#hl7decoder 로 설정됩니다. hl7encoder
및 hl7decoder
는 빈 ID일 뿐이므로 이름을 다르게 지정할 수 있습니다. 빈은 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");