当前位置: 首页 > 知识库问答 >
问题:

MDB正在插入重复记录

狄旭
2023-03-14

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

我遇到的问题是,当产生多个消息时,实体表中同时存在多个MDB查询实例。当时,这两个实例都不存在,然后流程为两个消息插入。而不是对不存在的实体进行插入,然后更新后续消息的记录。

我希望避免使用注释@activationconfigproperty(propertyName=“maxsession”,propertyValue=“1”)和部署到deploy-hasingleton文件夹,该文件夹只允许MDB的一个实例,因为这是不可伸缩的。

共有1个答案

严峰
2023-03-14

您收到的情况是由于重复相同数据包含在快速连续放置在队列中的消息中。对此有几种解决方案。

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

2)创建一个锁定机制,通过该机制创建一个表,用主键和消息内容将消息内容写入该表。然后根据内容筛选或创建要处理的数据顺序。这将缩短执行时间,但可以更好地审核数据。实际上,您将有两个异步进程作业。一个用于从队列中填充数据,另一个用于处理数据。您可以在一分钟后完成此操作。

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

参考资料http://tech.chococloud.com/archives/2152

由于不了解业务流程,我建议您尝试防止来自源的“重复”消息。

 类似资料:
  • 我在类方法中使用active record import gem来导入从csv文件读取的列表数组,如下代码所示: 根据active record导入文档,我正在尝试将列表的标题和VIN字段设置为冲突目标。如果列表的VIN字段发生冲突,我希望进行更新,而不是创建。 但是现在,每次我运行CSV上传时,它都在从isting.import创建一个新的列表,而不检查它是否冲突。 我哪里出错了?

  • 我有一个剑道网格在内联编辑模式。当我按下“添加新项目”按钮时,新行被添加并设置为编辑模式。通过多次按下“更新”按钮,我能够将重复记录插入数据库。 是否有可能在第一次点击后禁用更新按钮? 此外,在执行插入后,剑道网格上的行选择丢失。这是正常的行为吗?

  • 如何避免在PHP MYSQLi中插入重复记录?这是我的剧本:

  • 本文向大家介绍防止mysql重复插入记录的方法,包括了防止mysql重复插入记录的方法的使用技巧和注意事项,需要的朋友参考一下 防止mysql重复插入记录的方法有很多种,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了。 方案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免

  • 问题内容: 我了解存在和。但是,当有重复的键时,我想对临时表进行操作,以记录已违反的唯一键的记录,以便将其输出给用户。 有什么办法可以做吗?如果有帮助,我正在尝试进行批量插入。 问题答案: 使用,您不能插入到另一个表中-也没有可用的替代功能。 您可以通过两种自定义/替代方式来实现此目的: 使用对此问题的可接受答案中概述的:将MySQL ON DUPLICATE KEY插入到审计表或日志表中 创建一

  • 我在Parent中提供了一个简单的oneToMany关系,并在Chile Entity类中提供了相应的ManyToOne: 起源: } 儿童班级: 操作类: 示例案例:Status_code Reason_text abc abc1 xyz xyz1 保存表单:Status_code Reason_text abc abc1 xyz xyz1 abc abc1 xy z xyz2 对于任何操作:N