【发布时间】:2014-11-25 02:17:05
【问题描述】:
我们正在设计一种用于通信多个应用程序的架构,并且我们决定将 Mirth 用作(伪)ESB。在我们的流程中,我们希望尽快将控制权交还给用户,因此当用户触发操作时(例如,在填写表单后按下保存按钮)会在数据库中进行一些(必要的)更改,然后必须将消息发送到另一个系统。用户不必等到消息发送完毕,因此我们的应用程序会在数据库更改完成时交还控制权。消息组合在后台异步完成。但我们真的不知道应该采用哪种方法:
a) 在我们的应用程序中启动一个新线程,我们收集所有必要的数据(从“主数据”开始,即一些允许我们查找所有信息的主键)来填充 HL7 消息并将其发送到队列Mirth 正在听的地方。
b) 向 Mirth 发送“主要数据”并将 HL7 消息组合委托给它。Mirth 可以直接访问数据库以收集必要的数据,或者另一个选项可以调用我们自己的一些 REST/SOAP 服务。
在选项 B 的情况下,我们对如何调用 Mirth 有一些疑问: b.1) 我们的应用程序进行数据库修改并将主要数据写入队列(分布式事务)。 b.2) 我们的应用程序进行数据库修改并调用 Mirth 发布的 SOAP 或 Rest 服务,它所做的只是在 Mirth 也在读取的队列上写入消息(我们的应用程序中没有分布式事务)。
有些人认为在我们的应用程序中编写消息并仅将 Mirth 用作代理是“误用”Mirth。另一方面,有一些小伙伴发现从 Mirth 访问应用程序数据库非常具有侵入性,它不应该知道我们的架构。最后一个选项,从 Mirth 调用返回 HL7 的所有必要信息的应用程序服务就像从应用程序向 Mirth 发送“主要数据”只是为了在 Mirth 调用服务时取回它(将该数据作为参数传递)。
感谢您的建议。
【问题讨论】:
-
这个问题将是对Healthcare IT area51 proposal的一个很好的补充