zookeeper+ActiviteMQ踩坑指南

   环境:
  低配也需要3台服务器!!!!3台
   3台服务器 centos7  jdk1.6   
     zookeeper安装包3.14    activemq安装包 5.9
     jdk和activemq安装包对比图!!!一定要看!!!!
     采用zookeeper去管理activemq 必须是5.9开始的版本!!!只有5.9之后才支持!!!
     作者踩过的坑 采用了activemq5.11的安装包 启动不了 查看jdk版本太低
     采用5.8 的安装包 无法解析xml  levelDB  等错误信息
  apache-activemq-5.0.0 1.5.0_12    1.5+
   apache-activemq-5.1.0    1.5.0_12    1.5+
  apache-activemq-5.2.0 1.5.0_15    1.5+
  apache-activemq-5.3.0 1.5.0_17    1.5+
  apache-activemq-5.4.0 1.5.0_19    1.5+
  apache-activemq-5.5.0 1.6.0_23    1.6+
  apache-activemq-5.6.0 1.6.0_26    1.6+
  apache-activemq-5.7.0 1.6.0_33    1.6+
  apache-activemq-5.8.0 1.6.0_37    1.6+
  apache-activemq-5.9.0 1.6.0_51    1.6+
  apache-activemq-5.10.0    1.7.0_12-ea 1.7+
  apache-activemq-5.11.0    1.7.0_60    1.7+
  apache-activemq-5.12.0    1.7.0_80    1.7+
  apache-activemq-5.13.0    1.7.0_80    1.7+
  apache-activemq-5.14.0    1.7.0_80    1.7+
  apache-activemq-5.15.0    1.8.0_112   1.8+

     这里先介绍一下acviteMQ的 3种集群模式
1、默认的单机部署(kahadb) 
2、基于zookeeper的主从(levelDB Master/Slave) 
3、基于共享数据库的主从(Shared JDBC Master/Slave) 
 作者采用 的是第二种采用zookeeper实现管理activitemq集群

zookeeper集群配置

  先安装zookeeper集群
  作者习惯的安装目录是local
 [root@localhost local]# tar -zxvf zookeeper-**.tar.gz
 [root@localhost local]# mv zookeeper-** zookeeper ##取一个简单点的名字
 [root@localhost local]# cd zookeeper/conf   进入zookeeper的conf配置
 [root@localhost conf]# cp zoo_sample.conf  zoo.cfg     默认采用zoo_sample.conf  2个文件只能选择一个
 [root@localhost conf]# rm -rf zoo_sample.conf             删除自带的zoo_sample.conf
 [root@localhost conf]# vim zoo.conf
添加如下内容 有几个服务就写几个
server.0=master:2888:3888 ##master在这里是因为作者电脑配置了免密所以这样  可以写成ip
server.1=slave:2888:3888   ##slave在这里是因为作者电脑配置了免密所以这样  可以写成ip
server.2=slave:2888:3888
里面默认的clinet的端口是2181  如果有需要也可以进行修改

保存退出
 [root@localhost conf]#vim ../data/myid  修改data目录的myid  
0
保存退出
开始配置环境变量
export ZOOKEEPER_HME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER/bin
保存退出
source /etc/profile
进行分发操作把A的zookeeper配置分发到B服务器  需要修改myid的参数值不能重复
./zkServer start   分别启动2台服务器的zookeeper服务
./zkServer status 查看启动是否成功    一个领队  一个跟随者
A
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader

B
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower

zookeeper集群配置到这里就OK了

activeMQ集群配置

作者的安装包已经上传了
tar -zxvf  apache-activemq-5.9.0 #解压
cd activitmq/conf  #进入conf目录  修改配置文件
brokerName的名称需要修改 如果是在2台服务器上那么就无所谓了
配置activite集群 最少需要3台服务器   采用zookeeper管理只有brokerName一致才会被认为是集群
 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="master" dataDirectory="${activemq.data}">

 <persistenceAdapter>
         <replicatedLevelDB
                 directory="${activemq.data}/leveldb
                 replicas="3"
                 bind="tcp://0.0.0.0:51121" 集群当中的通讯端口 
                 zkAddress="127.0.0.1:2181,127.0.0.1:2182" zookeeper集群的地址
                 zkPath="/activemq/leveldb-stores"
          />
</persistenceAdapter>
这里的重要的一个属性 需要注意 
replicas : 集群中的节点数【(replicas/2)+1公式表示集群中至少要正常运行的服务数量】, 3台集群那么允许1台宕机, 另外两台要正常运行 这个参数值设置有误则会出现以下提示 提示数量不足:无法确定master 
Not enough cluster members connected to elect a master.

配置完毕 采用scp -r 分发命令 分发到B C服务器
分别启动两台服务器的activitmq服务 打开防火墙的8161端口 默认的clinet端口 提供给客户一个web操作界面
进行测试是否成功
启动3台服务器的mq服务
打开防火墙8161端口  3个ip   只能打开一个 因为只有一个master主机
关闭master主机  剩下2台会再推出一台。继续访问该链接还可以访问那么就配置成功了
关闭master 的服务
再通过该节点访问 如果还能访问该链接 那么配置集群成功

测试代码

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
//发送消息
public class P2PSender {
    private static final String QUEUE = "client1-to-client2";

    public static void main(String[] args) throws Exception {

        //1. 建立一个ConnectionFactory. 默认tcp://0.0.0.0:61616
        String userName = ActiveMQConnectionFactory.DEFAULT_USER;
        String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
        String brokerURL = "failover:(tcp://192.168.99.1:61616,tcp://192.168.99.2:61616,tcp:/192.168.99.3:61616)?Randomize=false";
//作者这里采用的默认配置 也就是有密码  默认activitemq密码是 admin  rabbitmq的默认的是guest
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( "admin", "admin", brokerURL );

        //2. 通过ConnectionFactory建立一个Connection连接,并且调用start方法开启
        Connection connection = connectionFactory.createConnection();
        connection.start();

        //3. 通过Connection创建Session,用于接收消息[第一个参数:是否启用事务;第二个参数:设置签收模式]
//        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Session session = connection.createSession( false, Session.CLIENT_ACKNOWLEDGE );//手工签收--常用

        //4. 通过Session创建Destination对象
        Destination destination = session.createQueue( "foodQueue" );

        //5. 通过Session创建发送或接受对象
        MessageProducer messageProducer = session.createProducer( null );

        //7. 使用JMS规范里面消息类型之一 TextMessage 来创建数据,用MessageProducer来发送
        for (int i = 1; i < 500; i++) {
            TextMessage message = session.createTextMessage();
            message.setText( "好了 测试成功了" + i );
            //参数:目标,消息,传递数据的模式,优先级,消息的过期时间
            messageProducer.send( destination, message, DeliveryMode.NON_PERSISTENT, 0, 1000 * 60 );
            //System.out.println("生产者:" + message.getText());
        }

        //使用事务要手动提交
        //session.commit();

        //8. 关闭连接
        connection.close();
    }
}



import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class P2PReceiver {
    private static final String QUEUE = "client1-to-client2";

    public static void main(String[] args) throws Exception {
        //1. 建立一个ConnectionFactory. tcp://0.0.0.0:61616
        String userName = ActiveMQConnectionFactory.DEFAULT_USER;
        String password = ActiveMQConnectionFactory.DEFAULT_PASSWORD;
        String brokerURL = "failover:(tcp://192.168.99.1:61616,tcp://192.168.99.2:61616,tcp://192.168.99.3:61616)?Randomize=false";
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory( "admin", "admin", brokerURL );

        //2. 通过ConnectionFactory建立一个Connection连接,并且调用start方法开启
        Connection connection = connectionFactory.createConnection();
        connection.start();

        //3. 通过Connection创建Session,用于接收消息[第一个参数:是否启用事务;第二个参数:设置签收模式]
        Session session = connection.createSession( false, Session.AUTO_ACKNOWLEDGE );

        //4. 通过Session创建Destination对象
        Destination destination = session.createQueue( "foodQueue" );

        //5. 通过Session创建发送或接受对象
        MessageConsumer messageConsumer = session.createConsumer( destination );

        //7. 使用JMS规范里面消息类型之一 TextMessage 来创建数据
        while (true) {
            TextMessage message = (TextMessage) messageConsumer.receive();
            if (message == null) break;
            System.out.println( "消费者:" + message.getText() );
        }

        //8. 关闭连接
        connection.close();
    }
}




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容