日期:2014-05-16  浏览次数:20272 次

ActiveMq集群 JDBCMaster Slave 出现的问题,欢迎讨论
在做ActiveMq集群 JDBCMaster Slave遇到几个问题。

有三个broker,bk1,bk2,bk3共离同一数据库db

操作步聚.

1.启动bk1,bk2,bk3.不连入任何客户端,如果我停止bk1,怎么确认现在的mater是哪个bk???????????



2.如果一个客户端连上bk1,一直发送消息,此时down掉bk1,共发送10条消息,数据库中就有10条记录,最大的ID为10.
由于bk1down掉,请求转到bk2数据库继续持久化,此时如果down掉bk2时,又发送的10条消息,那么数据库中的消息最大id为20,共20条消息 。

bk2down 掉之后转到bk3,又增加了10条消息 最大id为30,共20条消息 。

此时我又启动了BK1,down掉bk3,此时再存入消息 时,id值为11,为上次bk1down掉时的最大消息 ID值。

存入数据时报错
va.lang.Throwable: org.h2.jdbc.JdbcBatchUpdateException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.ACTIVEMQ_MSGS(ID)"; SQL statement:
INSERT INTO ACTIVEMQ_MSGS(ID, MSGID_PROD, MSGID_SEQ, CONTAINER, EXPIRATION, PRIORITY, MSG, XID) VALUES (?, ?, ?, ?, ?, ?, ?, ?) [23505-172]
at org.h2.jdbc.JdbcPreparedStatement.executeBatch(JdbcPreparedStatement.java:1167) ~[h2-1.3.172.jar:1.3.172]
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297) ~[na:na]
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297) ~[na:na]
at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:297) ~[na:na]



请问有什么好的解决方案吗?????????????????
1 楼 cesymm 5 小时前  
终于知道什么问题了,是数据库不支持锁。

我用的是h2数据库,不支持数据的各种特性

重复上面步聚,再当bk1启动时,由于数据库不支持,锁级别,bk1马上从数据库load最大值。

但切换到bk1时,bk1保存最大值,已是旧值 ,再保存数据库消息时,就会报主键重复的错误 !!!!!!