本章主要介绍Mirth Connect开发框架,讲解运行的各个阶段,请大家仔细研读、理解,对后续章节帮助是很大的。开发者把前端与服务分开运行,服务框架集成了很多流行的服务及协议,从中我们也可以看出开发的大致原理。本章涉及到的知识点需要了解一些的,比如SOAP第二章什么是通道?

通道是Mirth Connect的重要组成部分,被看做是一对多的一种单向通道,其通道组件是解耦的,在两个应用或多个应用之间传输医疗数据。Mirth Connect能把长消息任务分割成小消息任务,其可靠性、灵活性、高性能得到保证。


图2-1 Mirth Connect抽象通道架构

通道架构组成:由源、通道、目标组成,其中通道包括过滤组件和转换组件。

创建一个通道需要满足如下特点:

●源连接器类型,用于读取数据。(Source)

●目标连接器类型,用于发送数据。(Destination)

●入站消息格式。(inbound)

●出站消息格式。(outbound)

●传输(在入站和出站之间有个映射表)

什么是连接器(Connector)

连接器就是一个消息的端点,是Mirth Connect之间或与外部应用之间通讯的一种特殊协议。

支持的连接器列表:

●TCP/MLLP

●数据库(MySQL,PostgreSQL,ORACLE,SQLServer,ODBC)

●文件(本地文件系统和网络共享)

●PDF RTF文档

●JMS

●HTTP(免费版HTTPS协议不支持)

●SMTP

●SOAP(超HTTP)

收到数据的连接器被称为Reader(读取者),例如MLLP Reader;发送数据的连接器被称为Writer(写入者),例如Database Writer。

过滤器(filter)

现实世界中,许多应用之间互联,一个通道可能从许多源接收消息,然后这些消息根据消息的类型或条件,需要分门别类的处理。

有两种方法可以解决上述问题:过滤器或路由器。

路由器最关键的优势是根据唯一的位置决定消息到达目的地的条件。

过滤器是Mirth Connect处理消息的主要机制,根据消息的属性(段和元素)决定对消息的处理情况,过滤器从消息队列中检测消息的属性,而消息不会从消息队列中删除,如果本过滤器没有校验通过,原封不动的返回给消息队列,以便此消息用于其它的过滤器进行处理。

如果处理的消息类型很多,可以建立多个独立的到目标的通道,相互之间可以建立多个过滤器进行消息的处理。

转换器(Transformer)

许多情况下,遗留系统、客户应用和第三方应用,彼此之间需要根据数据模型进行消息的发送,尤其有特殊格式要求的数据系统。当新的商业需求提出一个唯一标准的时候,我们就需要把其他系统数据格式转成新系统要求的数据标准,传统方法处理起来即复杂又困难,更难于维护。

那么,对这些不同格式要求的消息,怎么进行数据互联呢?Mirth Connect提供了消息转换器来解决这类问题。通过Transformer,接收方得到了它理解的消息,变成自己的内部使用的数据格式。

Transformer支持的转换器类型:

●Message Builder把入站消息片段映射成出站消息片段。

●Mapper把入站消息片段映射成Mirth Connect内部变量,这些变量在 以后会被用到。

●External Script从名字上就能猜到,利用外部的javascript脚本进行消 息的转换或映射数据。

●XSLT Step就是个XSL转换工具

●JavaScript和External Script一样,灵活使用。在本教程中有许多地方 用到了JavaScript,Java代码也被用到了。

通道脚本执行的阶段

通道还支持脚本特性,增强消息的处理逻辑,适用于管道本身及所有传递的消息。

这些脚本的名字及含义如下:

●Deploy部署脚本,Mirth Connect Server启动的时候或通道重新部署的时候

启动这部分的脚本.

●Attachment附件脚本,以本地的格式处理消息并允许抽取一部分消息作为

附件存储起来,或者是不可避免的要修改消息。

●Preprocessor预处理脚本,脚本还允许在Mirth connect开始将其转换为内

部格式(即XML)之前以本机格式处理每个消息。

●Filter & Transformer过滤器和转换器,是我们处理入站和出站消息的主要

地方。

●Response应答脚本,从名字上看出,就是处理目标发送的应答信息。

●Postprocessor后处理器脚本,消息成功发送后执行的脚本。

●Undeploy反部署脚本,Mirth Connect Server每次停止服务的时候调用,比

如释放通道程序占用的内存。

脚本的执行顺序如下:

1. Global Deploy script全局部署

2. Deploy部署

3. Attachment script附件脚本

4. Global Preprocessor script全局预处理脚本

5. Preprocessor script预处理脚本

6. Source connector Filters script源连接器过滤器脚本

7. Source connector Transformer script or mapping源连接器转换器脚本或

映射

8. Destination 1 connector Filters script目标1连接器过滤器脚本

9. Destination 1 connector Transformer script or mapping目标1连接器转

换脚本或映射

10. Destination N connector Filters script目标N连接器过滤器脚本

11. Destination N connector Transformer script or mapping目标N连接器

转换脚本或映射

12. Response 1 Transformer script or mapping应答1转换脚本或映射

13. Response N Transformer script or mapping应答N转换脚本或映射

14. Postprocessor script后处理器脚本

15. Global Postprocessor script全局后处理器脚本

16. Undeploy反部署

17. Global Undeploy script全局反部署脚本

Deploy、Global Deploy每次管道重新部署启动一次,Undeploy、Global Undeploy也是一样,其他的每次发送接收消息都要执行一遍。注意Global Preprocessor在Preprocessor之前执行,Global Postprocessor在Postprocessor之后执行。

通道在序列里操作,首先被执行的是第一个通道的Attachment,而第一个通道Postprocessor是最后执行,让我们看看序列通道执行的情况如下图:


图2-2脚本执行序列

这个序列有三个通道串行执行,每到Destination Connector执行完毕就进入第二个通道,而应答的处理也是逐级递归。

接下来的内容我们就详细介绍这些情况。