我们正在设计一种用于通信多个应用程序的架构,并且我们决定使用 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 调用服务时取回它(将该数据作为参数传递)。
谢谢你的建议。