【发布时间】:2014-03-02 19:24:19
【问题描述】:
我们实现了 MDB,它接受用户输入和并行处理。我们对用户数据进行了限制检查(例如用户可以拥有的电话号码数量)。
我面临的问题是两个不同的线程获取相同用户的数据并进行处理。第一个线程很好,它检查限制并将手机正确添加到用户配置文件中。第二个线程也做同样的事情。但是限制检查发生在第一个线程提交事务之前,因此限制检查通过了。但它超过了极限。
有什么办法可以解决吗?让同一线程挑选一个用户的数据很好。但我不知道该怎么做。
请帮忙。提前致谢。
编辑:我还想传达一件事。在不同节点运行时会出现此问题。
【问题讨论】:
-
您遇到了并发问题而不是并行问题。你需要某种方式来控制谁在什么时候得到什么。如果没有更多信息,我就无法添加更多内容。
-
@edharned 谢谢,我已经相应地更新了问题
-
看看这个模式:eaipatterns.com/CompetingConsumers.html。考虑一下如果用户空间在服务器之间分配会发生什么。就像,一台服务器处理帐户从 0-5 开始的用户,另一台服务器处理从 6-9 开始的用户。现在您有了 SPOF,但这可以通过使用租约机制来解决,其中每个租约代表一个范围,并且服务器在启动时获取租约。
标签: java concurrency message-queue