gpt4 book ai didi

java - MDB 正在插入重复记录

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:18 26 4
gpt4 key购买 nike

我正在使用 JBOSS 5.1.2 MDB 来使用放置在队列上的实体消息。消息生产者可以为同一实体产生多条消息。这些消息实体由它们的实体号定义。 (msg_entity_no) 仅当实体不存在时,我才必须将记录插入到现有实体表中,否则我必须更新现有记录。现有实体表在此实体编号上并不唯一,因为它有另一个内部键。即它包含重复的 msg_entity_no

我遇到的问题是,当生成多条消息时,实体表上同时存在 MDB 查询的多个实例。此时,这两个实例都不存在,然后该进程会为这两个消息插入。与对不存在的实体进行一次插入相反然后更新后续消息的记录。

我想摆脱使用注释@ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1")并部署到deploy-hasingleton文件夹,该文件夹只允许一个MDB实例,因为这是不可扩展的。

最佳答案

您收到的情况是由于快速连续放入队列的消息中包含DUPLICATESAME DATA造成的。对此有几种解决方案。

1) DEQUEUE 在一个只有一个 mdb 的 JBOSS 实例上。这意味着您将在集群中的一台 JBOSS 服务器上运行 1 个 MDB,消息基本上将按顺序处理。

2) 创建一个锁定机制,通过该机制创建一个表,并使用主键和消息内容将消息内容写入该表。然后,您可以根据内容过滤出要处理的数据或创建要处理的数据的顺序。这会减慢执行时间,但您可以更好地审核数据。您本质上将有两个 ASYNC 进程作业。一个用于填充QUEUE中的数据,另一个用于处理数据。你可以在一分钟后这样做。

3) 某些 QUEUE 实现(例如 ORACLE AQ)具有出队条件,可以设置该条件。队列中的消息将根据该条件进行评估,并返回满足给定条件的消息。 TIBCO 有锁定策略,可以在代理中有多个线程时保护执行线程。

引用文献 http://tech.chococloud.com/archives/2152

由于不了解业务流程,我建议您尝试从源头阻止“DUPLICATE”消息。

关于java - MDB 正在插入重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23802941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com