我们有以下配置的ActiveMq 5.15.2:
所有接缝都正常,故障转移按预期工作,但有时在故障转移(或重新启动整个集群)期间,我们观察到以下异常:
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 existsActiveMQ将此异常直接传播到客户端。
我想,ActiveMQ可以识别出重复的信息,但是这里出了点问题……
客户端试图使用现有ID传递消息,难道ActiveMQ不应该将此消息与存储中已经存在的消息进行比较(如果可能的话,取决于DB),如果这两条消息相同,只需忽略第二条消息即可?
或者ActiveMQ假设重复的消息被允许持久化,并且我们的DB结构不正确(对id的约束)?
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吗?
发布于 2018-03-12 12:56:29
我们的JDBC配置不正确--自动提交设置为false,结果消息在DB中被延迟传播。
https://stackoverflow.com/questions/49066131
复制相似问题