0

我们的客户将 HL7 消息格式从 2.3 更改为 2.7,我对新消息格式有一些问题。基本上,我们能够以这种方式使用 mina2 协议路由消息:

<route>
<from uri="mina2:tcp://10.124.199.40:2575?sync=true&amp;codec=#hl7codec&amp;minaLogger=true" />
[...]
</route>

在消息标准升级之前它运行良好。实际上,将格式从 2.3 更改为 2.7 不起作用,我们收到以下 DEBUG 消息:

 2014-01-13 10:15:57,361 DEBUG HL7MLLPDecoder [104]  - Start scanning buffer at position 0
 2014-01-13 10:15:57,361 WARN  HL7MLLPDecoder [122]  - Ignoring unexpected 1st end byte 28. Expected 2nd endpoint 
 2014-01-13 10:15:57,361 DEBUG HL7MLLPDecoder [56]  - No complete message in this packet

我们正在使用 HAPI 作为消息解析器,恐怕这应该是问题所在,但在这种情况下,我期望 Camel 应该能够通过 mina2 路由消息,并且当我们从我们的业务中读取 HL7 消息时类捕获异常。但事实并非如此,似乎 mina2 无法路由消息。

有什么线索吗?是否可以在 mina2 解析之前捕获 MLLP 消息,以确保我们的客户以正确的格式发送它?

我还有一个问题。我试图生成一个非常简单的 jUnit 类来向 String 消息发送消息,但我不知道如何实现 MLLP 消息,我的问题是:mina2 是不是这样做的(将 String 消息包装为 MLLP 格式) 还是我在发送 HL7 消息之前要做的事情?

谢谢,安德里亚

4

1 回答 1

1

该问题与通过 mina2 侦听器创建和发送的 MLLP 消息有关。在骆驼中,我以这种方式定义了路线:

<route>
    <from uri="mina2:tcp://localhost:2576?sync=true&amp;codec=#hl7codecDebug&amp;noReplyLogLevel=DEBUG" />
    <to uri="file://HL7Messages?fileName=${file:name.noext}&amp;fileExist=Append"/>
    <log message="MINA2 DEBUG Message received" loggingLevel="INFO" />
</route>

问题,基本上是在camel-hl7编解码器上:

<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec">
    <property name="charset" value="UTF-8" />
</bean> 

当然,我实际上无法看到消息的内容,所以我只是在 HL7MLLPCodec 类上添加了一些调试输出行,以帮助我了解问题所在。

现在将编解码器从官方 apache 切换到我的调试版本,我能够看到所有发送到 mina2 的字节,然后再解码并重定向到下一个路由步骤。

回顾一下,(我很确定将来我会一遍又一遍地重读这篇文章),这些是封装 HL7 消息所需的字节:

startByte 0x0b The start byte spanning the HL7 payload.
endByte1 0x1c The first end byte spanning the HL7 payload.
endByte2 0x0d The 2nd end byte spanning the HL7 payload.

要启动骆驼上下文,我使用这个:

Main main = new Main();
main.setApplicationContext(new FileSystemXmlApplicationContext("src/test/resources/META-INF/spring/LOCALHOST-camel-context.xml"));
main.setDuration(-1);

main.run();

main是类org.apache.camel.spring.Main的一个实例

于 2014-01-15T14:55:00.410 回答