ActiveMQ(5)-基于ZooKeeper的HA方案
来源:互联网 发布:multiselect.zh cn.js 编辑:程序博客网 时间:2024/05/22 03:14
1.服务器准备
虚拟机环境CentOS6.5
zookeeper
activemq
2.zookeeper搭建
1)zookeeper下载:
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
2)zookeeper解压
tar -zxvf zookeeper-3.4.6.tar.gz
3)修改配置文件:
a)cp zoo_sample.cfg zoo.cfg将原有的zoo_sample.cfg 文件改为zoo.cfg
b)修改zoo.cfg文件,修改dataDir的值为:dataDir=/opt/zookeeper
c)在zoo.cfg文件的最末尾添加三行配置
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
1,2,3分别代表zookeeper所在服务,hadoop1,hadoop2,hadoop3代表zookeeper所在服务器的主机名,其余配置为固定配置
4)文件同步
将zookeeper配置文件同步到其他机器
scp /usr/app/zookeeper-3.4.6 root@hadoop2:/usr/app/
scp /usr/app/zookeeper-3.4.6 root@hadoop3:/usr/app/
5)在三台zookeeper服务器中创建/opt/zookeeper目录,并创建文件myid,文件内容分别1,2,3,即对应的serverid
6)配置zookeeper环境变量
vim /etc/profile,每台zookeeper服务器添加zookeeper的环境变量
source /etc/profile使每台zookeeper服务器环境变量生效
7)启动zookeeper
使用命令:zkServer.sh start
8)查看zookeeper状态
使用命令:zkServer.sh status
3.activemq搭建
1)activemq下载
wget https://archive.apache.org/dist/activemq/5.14.2/apache-activemq-5.14.2-bin.tar.gz
2)activemq解压(一般解压到当前文件夹下,如果解压到其他文件,是用-C选项指定具体需要解压到的目录)
tar -zxvf apache-activemq-5.14.2-bin.tar.gz
3)修改jetty端口
cd /usr/app/apache-activemq-5.14.2/conf
vim jetty.xml
hadoop1,hadoop2,hadoop3三台服务器分别对应的端口为8161,8162,8163
4)修改activemq.xml文件
a)修改brokerName
将brokerName改成自己的配置名称,三台机器命名一样
b)注释原持久化kahadb配置
c)添加leveldb持久化配置
需要将bind绑定端口改成相应的62621,62622,62623,hostname改为相应的hadoop1,hadoop2,hadoop3
d)修改消息端口
端口号相应的改成61616,61617,61618
5)启动activemq
进入到activemq安装目录
cd bin
./activemq start
查看日志启动是否出现异常,如果没有异常基本启动成功
也可以通过zookeeper客户端查看是否注册成功
配置生效,三个节点都存在
4本地测试
sender
package com.mq.activemq_01.helloworld;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;public class Sender { public static void main(String[] args) throws JMSException { //1.建立ConnectionFactory工厂对象,连接地址tcp://localhost:61616,在activemq.xml文件中配置 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD,// "tcp://localhost:61616"); "failover:(tcp://192.168.72.133:61616,tcp://192.168.72.129:61617,tcp://192.168.72.135:61618)?Randomize=false"); //2.通过ConnectionFactory创建Connection连接,并通过start开启连接 Connection connection = connectionFactory.createConnection(); connection.start(); //3.通过Connection创建Session会话,参数1表示是否启动事务,参数2表示签收模式封装在Session中 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); //4.通过Session创建Destination目的地,参数生产者和消费者的约束名字,消费者需要知道该名字 Destination destination = session.createQueue("queue2"); //5.创建消息发送或者接收对象 MessageProducer messageProducer = session.createProducer(destination); //6.设置持久化和非持久化对象,这里设置是非持久化 messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //7.通过session创建message,JMS定义了五种正文格式 for (int i = 1; i <= 5000; i++) { TextMessage textMessage = session.createTextMessage(); textMessage.setText("我是消息内容,id="+i); messageProducer.send(textMessage); System.out.println("生产者:生产了"+textMessage.getText()); Thread.sleep(1000); } //8.释放连接 if(connection != null){ connection.close(); } }}
receiver
package com.mq.activemq_01.helloworld;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver { public static void main(String[] args) throws JMSException { //1.建立ConnectionFactory工厂对象,连接地址tcp://localhost:61616,在activemq.xml文件中配置 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD,// "tcp://localhost:61616"); "failover:(tcp://192.168.72.133:61616,tcp://192.168.72.129:61617,tcp://192.168.72.135:61618)?Randomize=false"); //2.通过ConnectionFactory创建Connection连接,并通过start开启连接 Connection connection = connectionFactory.createConnection(); connection.start(); //3.通过Connection创建Session会话,参数1表示是否启动事务,参数2表示签收模式封装在Session中 Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); //4.通过Session创建Destination目的地,参数生产者和消费者的约束名字,消费者需要知道该名字 Destination destination = session.createQueue("queue2"); //5.创建消息发送或者接收对象 MessageConsumer messageConsumer = session.createConsumer(destination); //6.设置持久化和非持久化对象,这里设置是非持久化 while (true) { TextMessage receive = (TextMessage)messageConsumer.receive(); if(receive == null){ break; } System.out.println("消费者:收到消息"+receive.getText()); Thread.sleep(1000); } //7.释放连接 if(connection != null){ connection.close(); } }}
先启动receiver,再执行sender代码
INFO | Successfully connected to tcp://192.168.72.133:61616
消费者:收到消息我是消息内容,id=1
消费者:收到消息我是消息内容,id=2
消费者:收到消息我是消息内容,id=3
消费者:收到消息我是消息内容,id=4
消费者:收到消息我是消息内容,id=5
消费者:收到消息我是消息内容,id=6
消费者:收到消息我是消息内容,id=7
消费者:收到消息我是消息内容,id=8
消费者:收到消息我是消息内容,id=9
消费者:收到消息我是消息内容,id=10
消费者:收到消息我是消息内容,id=11
消费者:收到消息我是消息内容,id=12
消费者:收到消息我是消息内容,id=13
5故障测试
关闭当前master的61616服务
./activemq stop
查看执行结果
生产者:
消费者:
自动切换为备用slave
到此,zookeeper+activemq的HF方案架构搭建完毕
- ActiveMQ(5)-基于ZooKeeper的HA方案
- ActiveMQ小记(二):基于ZooKeeper的HA方案
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
- ActiveMQ笔记(3):基于Networks of Brokers的HA方案
- ZooKeeper 实现 activemq HA
- Spark基于zookeeper的HA
- 基于Zookeeper的Spark HA配置说明
- 基于zookeeper的hadoop HA实现
- 基于zookeeper的hadoop HA实现
- 基于Zookeeper的Hadoop HA实现
- 基于sentinel的redis的HA方案
- 基于zookeeper+levelDB的ActiveMQ集群
- Spark集群基于Zookeeper的HA搭建部署笔记
- Spark集群基于Zookeeper的HA搭建部署
- Spark集群基于Zookeeper的HA搭建部署
- 基于zookeeper的高可用Hadoop HA集群安装
- Spark集群搭建+基于zookeeper的高可用HA
- HDU6000 Wash 二分+贪心
- HDOJ2124 Repair the Wall(类似背包问题)
- 【python数据挖掘课程】十八.线性回归及多项式回归分析四个案例分享
- [SDS阅读理解/8]源码中的函数/5
- 1046. Shortest Distance (20) 单环图的求路径性质
- ActiveMQ(5)-基于ZooKeeper的HA方案
- 集群与分布式的区别
- Apache设置二级域名
- 把自己以前零散的技术学习都移植过来吧,这里编辑文章感觉还不错
- UIImageView
- C语言基础之数组
- 2017年11月25日,技术笔记整理
- 可变参数列表的解析
- Java —— 包装类