我正在开发一个系统,它接收与医院中患者活动相关的消息,解析并存储这些数据(HL7 2.x消息)。一些消息可能包含基本的患者信息,其他消息可能包含实验室结果、转录文档等。
我想使用异步可靠的消息传递系统(比如WCF + MSMQ或Apache Camel + ActiveMQ )来做这件事。看起来这些技术将是一个很好的选择。
然而,我在理解如何应用这些技术来解决问题时遇到了麻烦。如果在解析和存储患者的数据时传入消息并出现错误,我需要暂停处理该患者的传入消息,直到问题得到解决。
如果出现问题,我真的不想停止为所有患者处理消息,只为有问题的单个患者处理消息。
有没有一种设计模式或某种方法来处理我所遗漏的这种情况?
我很可能会使用数据库来存储消息并跟踪各个患者队列。如果发生错误,我可以锁定患者,以便在问题解决之前不再处理消息。
我只是在找一个理智的检查。有没有一种更简单的方法来做到这一点,或者手动管理数据库中的队列和患者是解决这个问题的合理方法?
发布于 2011-09-12 23:37:52
这与客户最近的一个需求非常相似,这里是我们如何在Camel/ActiveMQ中解决这个问题的……
发布于 2011-09-12 15:37:31
您可以使用基于内容的路由器http://camel.apache.org/content-based-router.html
然后将“麻烦患者”的消息路由到一个特殊的队列。对于没有问题的患者,您可以照常处理它们。
然后,当患者被“修复”时,您可以使用JMS选择器从“故障队列”中为该患者拾取消息,并将其放回常规队列中,以便重新处理这些消息。
发布于 2011-09-12 16:07:02
如何处理特定患者ID的失败。
让每个患者都有一个消息队列根本不是可伸缩的。您可能有1000名患者,因此您将需要保持相同数量的队列。噩梦。
因此,要处理同一队列上的多个患者记录,需要使从队列中读取的服务具有容错能力。
我的意思是,如果服务无法处理出队的消息(可能是由于消息的数据问题,或者下游依赖项不可用),则服务可以执行以下一个或多个操作:
如果您要求始终按顺序处理单个患者的消息,那么您将面临不同的挑战,并且需要在允许处理每条消息之前实现一个通过/不通过查找。这是一个标准的有序交付实现。
希望这能有所帮助。
我认为也许你应该重新发布一个新问题或多个问题,让你面临更有针对性的挑战。我感觉你现在正面临着多重挑战。
https://stackoverflow.com/questions/7383170
复制相似问题