首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >故障转移上的重复消息检测

故障转移上的重复消息检测
EN

Stack Overflow用户
提问于 2018-03-02 09:23:02
回答 1查看 567关注 0票数 0

我们有以下配置的ActiveMq 5.15.2:

  • PostgreSQL用于持久
  • 两个节点,一个处于待命状态
  • 具有共享数据库的JDBC主从机
  • 静态簇发现

所有接缝都正常,故障转移按预期工作,但有时在故障转移(或重新启动整个集群)期间,我们观察到以下异常:

代码语言:javascript
复制
 WARN  [ActiveMQ NIO Worker 6] org.apache.activemq.transaction.LocalTransaction  - Store COMMIT FAILED:java.io.IOException: Batch entry 2 INSERT INTO ACTIVEMQ_MSGS(ID, MSGID_PROD, MSGID_SEQ, CONTAINER, EXPIRATION, PRIORITY, MSG, XID) VALUES (...) was aborted:  Unique-Constraint activemq_msgs_pkey Detail: key(id)=(7095330) alerady exists

ActiveMQ将此异常直接传播到客户端。

我想,ActiveMQ可以识别出重复的信息,但是这里出了点问题……

客户端试图使用现有ID传递消息,难道ActiveMQ不应该将此消息与存储中已经存在的消息进行比较(如果可能的话,取决于DB),如果这两条消息相同,只需忽略第二条消息即可?

或者ActiveMQ假设重复的消息被允许持久化,并且我们的DB结构不正确(对id的约束)?

代码语言:javascript
复制
CREATE TABLE activemq_msgs
(
   id          bigint          NOT NULL,
   container   varchar(250),
   msgid_prod  varchar(250),
   msgid_seq   bigint,
   expiration  bigint,
   msg         bytea,
   priority    bigint,
   xid         varchar(250)
);


ALTER TABLE activemq_msgs
   ADD CONSTRAINT activemq_msgs_pkey
   PRIMARY KEY (id);

我们应该放弃activemq_msgs_pkey吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-12 12:56:29

我们的JDBC配置不正确--自动提交设置为false,结果消息在DB中被延迟传播。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49066131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档