首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用可靠的异步消息可靠地解析和存储数据?

如何使用可靠的异步消息可靠地解析和存储数据?
EN

Stack Overflow用户
提问于 2011-09-12 11:59:27
回答 4查看 313关注 0票数 2

我正在开发一个系统,它接收与医院中患者活动相关的消息,解析并存储这些数据(HL7 2.x消息)。一些消息可能包含基本的患者信息,其他消息可能包含实验室结果、转录文档等。

我想使用异步可靠的消息传递系统(比如WCF + MSMQ或Apache Camel + ActiveMQ )来做这件事。看起来这些技术将是一个很好的选择。

然而,我在理解如何应用这些技术来解决问题时遇到了麻烦。如果在解析和存储患者的数据时传入消息并出现错误,我需要暂停处理该患者的传入消息,直到问题得到解决。

如果出现问题,我真的不想停止为所有患者处理消息,只为有问题的单个患者处理消息。

有没有一种设计模式或某种方法来处理我所遗漏的这种情况?

我很可能会使用数据库来存储消息并跟踪各个患者队列。如果发生错误,我可以锁定患者,以便在问题解决之前不再处理消息。

我只是在找一个理智的检查。有没有一种更简单的方法来做到这一点,或者手动管理数据库中的队列和患者是解决这个问题的合理方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-09-12 23:37:52

这与客户最近的一个需求非常相似,这里是我们如何在Camel/ActiveMQ中解决这个问题的……

  • 使用ActiveMQ message groups对给定患者进行单线程处理(保留顺序等),并仍然允许多线程processing
  • setup驼峰exception handling在处理错误时将患者添加到例外列表(存储在HazelcastCache中)
  • 使用骆驼filter将例外列表患者的消息路由到例外队列
  • 设置计时器,以便在发生异常时定期重试异常队列中的消息
  • 设置电子邮件通知(如果要将消息分组到较少的电子邮件中,请使用C15,等)
  • 使用ActiveMQ JMX手动查看/重试/移动/删除邮件,以便对其进行适当的分类(构建了一个基于web的控制台来支持此功能)
票数 4
EN

Stack Overflow用户

发布于 2011-09-12 15:37:31

您可以使用基于内容的路由器http://camel.apache.org/content-based-router.html

然后将“麻烦患者”的消息路由到一个特殊的队列。对于没有问题的患者,您可以照常处理它们。

然后,当患者被“修复”时,您可以使用JMS选择器从“故障队列”中为该患者拾取消息,并将其放回常规队列中,以便重新处理这些消息。

票数 1
EN

Stack Overflow用户

发布于 2011-09-12 16:07:02

如何处理特定患者ID的失败。

让每个患者都有一个消息队列根本不是可伸缩的。您可能有1000名患者,因此您将需要保持相同数量的队列。噩梦。

因此,要处理同一队列上的多个患者记录,需要使从队列中读取的服务具有容错能力。

我的意思是,如果服务无法处理出队的消息(可能是由于消息的数据问题,或者下游依赖项不可用),则服务可以执行以下一个或多个操作:

  1. 重试配置的次数(使用配置的频率)
  2. 将该消息与任何错误/诊断信息一起路由到另一个消息队列或另一个进程。
  3. 不执行任何操作,并允许消息的生存时间超时过期,因此排队系统会将其作为坏消息进行处理(不推荐)。

如果您要求始终按顺序处理单个患者的消息,那么您将面临不同的挑战,并且需要在允许处理每条消息之前实现一个通过/不通过查找。这是一个标准的有序交付实现。

希望这能有所帮助。

我认为也许你应该重新发布一个新问题或多个问题,让你面临更有针对性的挑战。我感觉你现在正面临着多重挑战。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7383170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档