我正在开发一个系统,该系统接收与医院中患者事件相关的消息,解析并存储这些数据(HL7 2.x 消息)。 有些消息可能包含基本的患者信息,其他消息可能包含实验室结果、转录文档等。
我想使用异步可靠消息系统来完成此任务(例如 WCF + MSMQ 或 Apache Camel + ActiveMQ。看起来这些技术很合适。
不过,我无法理解如何应用这些技术来解决问题。 如果收到消息并且在解析和存储患者数据时出现问题,我需要停止处理该患者的传入消息,直到问题解决。
如果出现问题,我真的不想停止处理所有患者的消息,只想停止处理有问题的单个患者的消息。
是否有我缺少的设计模式或某种处理此类情况的方法?
我很可能会使用数据库来存储消息并跟踪各个患者队列。如果发生错误,我可以锁定患者,这样在问题解决之前将不再处理消息。
我只是在寻找健全性检查。有没有更简单的方法来做到这一点,或者手动管理数据库中的队列和患者是解决此问题的合理方法?
最佳答案
这与客户最近的要求非常相似,以下是我们在 Camel/ActiveMQ 中解决此问题的方法...
- 使用过 ActiveMQ message groups对给定患者进行单线程处理(保留顺序等)并仍然允许多线程处理
- 设置 Camel exception handling当发生处理错误时将患者添加到异常(exception)列表(存储在 Hazelcast 或 Cache 中)
- 使用了 Camel filter将异常(exception)列表患者的消息路由到异常(exception)队列
- 设置一个计时器以定期重试异常队列中的消息
- 设置发生异常时的电子邮件通知(如果数量较多,请使用 aggregator 将消息分组到更少的电子邮件等)
- 已使用ActiveMQ JMX手动查看/重试/移动/删除消息以对其进行适当分类(构建了一个基于网络的控制台来支持此操作)
关于wcf - 如何使用可靠的异步消息可靠地解析和存储数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383170/