文章来源
http://hi.baidu.com/minordragon/blog/item/6752c21fcad2b211314e15e7.html
如下:
解决单点故障:Pure Master Slave
1. Master:给broker取个名字,修改其持久化KAHADB文件
2. Slave:给broker取个名字,修改其持久化KAHADB文件,需要配置Master的地址和端口
3. 一个Master只能带一个Slave
4. Master工作期间,会将消息状况自动同步到Slave
5. Master一旦崩溃,Slave自动接替其工作,已发送并尚未消费的消息继续有效
6. Slave接手后,必须停止Slave才能重启先前的Master
MQ配置
1. Master:首先复制 $activemq_dir$/conf/activemq.xml,并改名为:pure_master.xml,修改文件(192.168.0.20)
1) <broker brokerName="pure_master" …
2) <kahaDB directory="${activemq.base}/data/kahadb_pure_master "/>
3) <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
2. Slave:首先复制 $activemq_dir$/conf/activemq.xml,并改名为:pure_slave.xml,修改文件(192.168.0.86)
1) <broker brokerName="pure_slave" masterConnectorURI="tcp://192.168.0.20:61616" //master的ip
shutdownOnMasterFailure="false" …
2) <kahaDB directory="${activemq.base}/data/kahadb_pure_slave "/>
3) <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
3. 首先启动Master,启动完毕后在另一个Shell启动Slave,Slave启动后,可以看到Master那个Shell中显示已经Attach上了Slave
1) 启动Master:$activemq_dir$\bin>activemq xbean:file:../conf/pure_master.xml
2) 启动Slave:$activemq_dir$\bin>activemq xbean:file:../conf/pure_slave.xml
JAVA测试:队列
1. 生产者
public static void main(String[] args) throws Exception {
ConnectionFactory cf = new ActiveMQConnectionFactory("failover:(tcp://0.0.0.0:61616,tcp://0.0.0.0:61617)");
Connection conn = cf.createConnection();
conn.start();
Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue qq = new ActiveMQQueue("qq1");
MessageProducer prod = sess.createProducer(qq);
Message msg = null;
Scanner scan = new Scanner(System.in);
String str = scan.next();
while(true) {
msg = sess.createTextMessage(str);
prod.send(msg);
if(str.equals("exit")) {
break;
}
str = scan.next();
}
conn.close();
}
2. 消费者
public static void main(String[] args) throws Exception {
ConnectionFactory cf = new ActiveMQConnectionFactory("failover:( tcp://0.0.0.0:61616,tcp://0.0.0.0:61617)");
Connection conn = cf.createConnection();
conn.start();
Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue qq = new ActiveMQQueue("qq1");
MessageConsumer cs = sess.createConsumer(qq);
TextMessage msg = (TextMessage)cs.receive();
String str = msg.getText();
while(true) {
System.out.println("receive msg:\t"+msg.getText());
if(str.equals("exit")) {
break;
}
msg = (TextMessage)cs.receive();
str = msg.getText();
}
conn.close();
}
测试步骤
1. 启动生产者,发送几条消息
2. 启动消费者,可看到接收到的消息
3. 关闭消费者
4. 生产者继续发送几条消息—消息A
5. 停止Master(可看到生产者端显示连接到Slave(tcp://0.0.0.0:61617)了)
6. 生产者继续发送几条消息—消息B
7. 启动消费者
8. 消费者接收了消息A和消息B,可见Slave接替了Master的工作,而且储存了之前生产者经过Master发送的消息
结论
Pure Master Slave模式实现方式简单,可以实现消息的双机热备功能;队列可以实现消息的异步和点对点发送
分享到:
相关推荐
这种配置是ActiveMQ推荐的策略之一,提供了三种不同的实现方式:Pure Master Slave、Shared File System Master Slave和JDBC Master Slave。 在安装和配置ActiveMQ Master-Slave集群之前,需要准备以下环境: 1. ...
在ActiveMQ中,主要有三种Master-Slave实现:Pure Master Slave、Shared File System Master Slave和JDBC Master Slave。这里主要讨论的是JDBC Master Slave模式,它依赖于数据库来确定哪个Broker是Master,哪个是...
ActiveMQ集群部署方式对比:Pure Master Slave方式,Shared Filesystem Master-Slave方式 ,Shared Database Master-Slave方式,Replicated LevelDB Store方式,Broker-Cluster部署方式....
为了实现ActiveMQ集群,需要在两台服务器上分别配置Master和Slave。具体步骤如下: **1. Master配置** - **配置Master**: 找到`C:\ActiveMQ\conf`目录下的`activemq.xml`配置文件,修改`broker`节点中的`broker...
- Pure Master Slave:单一主节点负责消息处理,备用节点仅在主节点故障时接管。 - Shared File System Master Slave:共享文件系统用于同步主从节点的状态,确保一致性。 - JDBC Master Slave (DB only):使用...
自ActiveMQ 5.9.0版本起,原有的Pure Master Slave部署方式已被新的基于ZooKeeper + LevelDB的实现所取代,而其他传统的部署方式仍然保留。 ##### 1. Master-Slave部署方式 Master-Slave部署方式主要包括以下几种...
- **纯主备(Pure Master Slave):** 最简单的主备配置。 - **共享文件系统主备(Shared FileSystem Master Slave):** 通过共享文件系统实现数据同步。 - **数据库主备(JDBC Master Slave):** 通过数据库实现数据...