两个activemq用一个mysql

发现一个activemq好玩的地方。
  两个activemq的broker实例persistence共用一个mysql数据库。会怎么样?
 
 答案是运行中的两个activemq,是没有问题的。
 一个重启的activemq,会加载数据库中存的消息,这个时候就分不清楚了,全部都加载了。
 猜想,如果消费的比生产的慢,一样会出现消息混淆的问题。
  因为正常情况下,其实存的这份消息和发出去的这份消息,从分出来以后就没有什么关系了。
 
所以,正常的流程里不会相互影响。
 
一个正常发过来的持久化的消息, 一般情况下则会变成两份,一份在内存,一份存入数据库。内容中的成功发送给消费者,就去把数据库里这条记录删掉。整个过程没有从数据库加载数据,所以不会混淆。
 
一重启或者内存放不下了,可能会出问题。
3种测试情况
先后启动两个broker A:61616和broker B:61617,配置同一个mysql数据库。
1、向A中发送数据a,B中发送数据b,数据库msgs表中存在两条记录。
     从A receive消息,得到a,从B得到消息b。msgs表清空。
2、向A中发送数据a,数据库msgs表中存在1条记录。关闭A,重启B,从B中接收一条消息a。
3、向A中发送数据a1、a2,数据库msgs表中存在2条记录。重启B。
     从B中接收一条消息a1。从A中接收一条消息a1。
     从A中接收一条消息a2。从B中接收一条消息a2。
    
   
   

猜你喜欢

转载自setting.iteye.com/blog/1053937
今日推荐