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

标签 wcf jms msmq messaging apache-camel

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

我想使用异步可靠消息系统来完成此任务(例如 WCF + MSMQ 或 Apache Camel + ActiveMQ。看起来这些技术很合适。

不过,我无法理解如何应用这些技术来解决问题。 如果收到消息并且在解析和存储患者数据时出现问题,我需要停止处理该患者的传入消息,直到问题解决。

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

是否有我缺少的设计模式或某种处理此类情况的方法?

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

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

最佳答案

这与客户最近的要求非常相似,以下是我们在 Camel/ActiveMQ 中解决此问题的方法...

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

关于wcf - 如何使用可靠的异步消息可靠地解析和存储数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383170/

相关文章:

wcf - EF4 POCO WCF 序列化问题(无延迟加载、代理/无代理、循环引用等)

wcf - 使用 makecert.exe 创建的证书在哪里?

java - JMS 队列和主题命名约定的建议

windows-xp - 如何使用 Windows XP 中的计算机管理工具从 MSMQ 删除消息

c# - 在 Windows 服务中处理 MSMQ 消息

wcf - 通过 MSMQ 将日志缓冲到 WCF Web 服务

asp.net - ASP.NET编译和回收后出现“无法加载App_Web _ *。dll”异常

c# - Task<> 不包含 'GetAwaiter' 的定义

java - MessageDrivenBean 中的 Finalize 方法

JavaEE :links to learn JBoss/EJB and JMS