【发布时间】:2019-06-25 03:53:26
【问题描述】:
最近我设计了一个系统,使用 Oracle 高级队列 (AQ) 使用 JMS 处理健康数据。该消息必须包含患者信息,例如姓名、健康卡号等。此外,该消息可能包含患者免疫记录。我正在使用 Spring Boot,我能够通过配置多个消息侦听器(最多 30 个)同时处理这些消息。所以我能够获得表演。但是,这些消息是按时间顺序处理的,导致数据不一致。例如,消息 A 表示新的患者记录,消息 B 表示使用消息 A 创建的对患者的更新。如果随后处理(消息 A,然后是消息 B),则结果与上游系统一致。但是,如果同时处理,结果与现实不同步(消息 B 可能在消息 A 之前得到处理)。 显然,如果有消息 A,我将不会开始处理消息 B。假设我有办法确定它(每条消息都有事件时间戳和状态)。但是如何实际实施呢? 如果有人分享他们的经验,我将不胜感激。实际技术无所谓,我正在寻找某种设计模式
【问题讨论】:
-
@JustinBertram 我正在使用 Oracle 高级队列 (AQ)。我正在考虑消息分组,但根据 Oracle,它必须是一个事务的一部分。在我的情况下这是不可能的,我无法控制消息的发送方式。
-
我的回答是否解决了您的问题?如果是这样,请将其标记为正确,以帮助将来有相同问题的其他用户。如果不是,请详细说明原因。谢谢!
标签: multithreading algorithm design-patterns concurrency jms