ActiveMQ是一款功能强大的消息服务器,它支持许多种开发语言,例如Java, C, C++, C#等等。企业级消息服务器无论对服务器稳定性还是速度,要求都很高,而ActiveMQ的分布式集群则能很好的满足这一需求,下面说说ActiveMQ的几种集群配置。Queue consumer clusters此集群让多个消费者同时消费一个队列,若某个消费者出问题无法消费信息,则未消费掉的消息将被发给其他正常的消费者,结构图如下:

一、activeMQ主要的几类部署方式比较1、默认的单机部署(kahadb)activeMQ的默认存储的单机方式,以本地kahadb文件的方式存储,所以性能指标完全依赖本地磁盘IO,不能提供高可用。2、基于zookeeper的主从(levelDB Master/Slave)5.9.0新推出的主从实现,基于zookeeper来选举出一个master,其他节点自动作为slave实时同步消息。因为有实时同步数据的slave的存在,master不用担心数据丢失,所以leveldb会优先采用内存存储消息,异步同步到磁盘。所以该方式的activeMQ读写性能都最好,特别是写性能能够媲美非持久化消息。优点:实现高可用和数据安全性能较好缺点:因为选举机制要超过半数,所以最少需要3台节点,才能实现高可用。3、基于共享数据库的主从(Shared JDBC Master/Slave)可以基于postgres、mysql、oracle等常用数据库。每个节点启动都会争抢数据库锁,从而保证master的唯一性,其他节点作为备份,一直等待数据库锁的释放。因为所有消息读写,其实都是数据库操作,activeMQ节点本身压力很小,性能完全取决于数据库性能。优点:实现高可用和数据安全简单灵活,2台节点就可以实现高可用缺点:稳定性依赖数据库性能依赖数据库
ActiveMQ 集群配置 高可用自从activemq5.9.0开始,activemq的集群实现方式取消了传统的Pure Master Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在。1、Master-Slave部署方式 1)、Shared Filesystem Master-Slave方式 2)、Shared Database Master-Slave方式3)、Replicated LevelDB Store方式第一种方案同样支持N个AMQ实例组网,但由于他是基于kahadb存储策略,亦可以部署在分布式文件系统上,应用灵活、高效且安全。 第二种方案与shared filesystem方式类似,只是共享的存储介质由文件系统改成了数据库而已,支持N个AMQ实例组网,但他的性能会受限于数据库; 第三种方案是ActiveMQ5.9以后才新增的特性,使用ZooKeeper协调选择一个node作为master。被选择的master broker node开启并接受客户端连接。 其他node转入slave模式,连接master并同步他们的存储状态。其他node转入slave模式,连接master并同步他们的存储状态。如果master死了,得到了最新更新的slave被允许成为master。fialed node能够重新加入到网络中并连接master进入slave mode。至于为什么是2-1,熟悉Zookeeper的应该知道,有一个node要作为观擦者存在。
Shared Filesystem Master-Slave方式 shared filesystem Master-Slave部署方式主要是通过共享存储目录来实现master和slave的热备,所有的ActiveMQ应用都在不断地获取共享目录的控制权,哪个应用抢到了控制权,它就成为master。 多个共享存储目录的应用,谁先启动,谁就可以最早取得共享目录的控制权成为master,其他的应用就只能作为slave。 一、下载activeMQ解压并复制3份二、修改配置文件conf下面 activemq.xml如下 ,3份文件broker都修改为一致  其中dataDirectory 是 数据存储共享目录地址修改 kahaDB目录地址为数据存储共享目录地址修改openwire  的tcp 连接地址端口分别为 61616 61626 61636 二 、修改conf 下面的 jetty.xml文件,修改管理界面端口 8161 8162 8163 方便测试查看启动的那一个activemq服务三、启动  成功了一个后面的将阻塞等待获取锁 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;public class Receiver {public static void main(String[] args) {// ConnectionFactory :连接工厂,JMS 用它创建连接ConnectionFactory connectionFactory;// Connection :JMS 客户端到JMS Provider 的连接Connection connection = null;// Session: 一个发送或接收消息的线程Session session;// Destination :消息的目的地;消息发送给谁.Destination destination;// 消费者,消息接收者MessageConsumer consumer;connectionFactory = new ActiveMQConnectionFactory("failover:(tcp://localhost:61616,tcp://localhost:61626,tcp://localhost:61636)");try {// 构造从工厂得到连接对象connection = connectionFactory.createConnection();// 启动connection.start();// 获取操作连接session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置destination = session.createQueue("FirstQueue");consumer = session.createConsumer(destination);while (true) {//设置接收者接收消息的时间,为了便于测试,这里谁定为100sTextMessage message = (TextMessage) consumer.receive(100000);if (null != message) {System.out.println("收到消息" + message.getText());} else {break;}}} catch (Exception e) {e.printStackTrace();} finally {try {if (null != connection)connection.close();} catch (Throwable ignore) {}}}
}
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;public class Sender {private static final int SEND_NUMBER = 5;public static void main(String[] args) {// ConnectionFactory :连接工厂,JMS 用它创建连接ConnectionFactory connectionFactory;// Connection :JMS 客户端到JMS Provider 的连接Connection connection = null;// Session: 一个发送或接收消息的线程Session session;// Destination :消息的目的地;消息发送给谁.Destination destination;// MessageProducer:消息发送者MessageProducer producer;// TextMessage message;// 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jarconnectionFactory = new ActiveMQConnectionFactory("failover:(tcp://localhost:61616,tcp://localhost:61626,tcp://localhost:61636)");try {// 构造从工厂得到连接对象connection = connectionFactory.createConnection();// 启动connection.start();// 获取操作连接session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置destination = session.createQueue("FirstQueue");// 得到消息生成者【发送者】producer = session.createProducer(destination);// 设置不持久化,此处学习,实际根据项目决定 ---- 集群此处必须持久化//   producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 构造消息,此处写死,项目就是参数,或者方法获取sendMessage(session, producer);session.commit();} catch (Exception e) {e.printStackTrace();} finally {try {if (null != connection)connection.close();} catch (Throwable ignore) {}}}public static void sendMessage(Session session, MessageProducer producer)throws Exception {for (int i = 1; i <= SEND_NUMBER; i++) {TextMessage message = session.createTextMessage("ActiveMq 发送的消息" + i);// 发送消息到目的地方System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);producer.send(message);}}
}

ActiveMQ的几种集群配置相关推荐

  1. windows下tomcat集群配置(两种方法)

    两种方法只是在配置上不同原理一样,因为apache2.X后其自身集成了mod_jk功能,相对于1.3版本,不需要再进行繁琐的worker.properties配置,配置过程大幅简化. 一.软件需求 操 ...

  2. Redis高可用之集群配置(六)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  3. Linux系统运维之Zookeeper集群配置

    一.简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.ZooKeeper的目标就是封装好复杂易 ...

  4. Jboss4集群配置之四:启动Jboss集群

    1.前言 2.集群准备知识 3.Jboss集群配置实例概述 4.Jboss集群负载均衡器配置 5.Jboss集群节点配置 6.启动Jboss集群 6.启动Jboss集群 步骤 先启动负载均衡器apac ...

  5. Redis三种集群模式介绍

    三种集群模式 redis有三种集群模式,其中主从是最常见的模式. Sentinel 哨兵模式是为了弥补主从复制集群中主机宕机后,主备切换的复杂性而演变出来的.哨兵顾名思义,就是用来监控的,主要作用就是 ...

  6. Jenkins 权限配置与集群配置

    由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,我们使用Role-based Authorization Strategy 插件,安装请参考前面插 ...

  7. DMDW集群配置到DEM

    DM集群配置到DEM 步骤 在主备机集群上配置java环境 修改主备集群的agent.ini文件 dem系统上配置集群 一.安装jdk 清除其他版本的java包 [root@localhost jav ...

  8. Redis主从配置和集群配置

    Redis主从配置和集群配置 文章目录 Redis主从配置和集群配置 一.Redis主从配置 1.主从概念 2.主从配置 3.数据操作 二.Redis集群配置 1.简介 2.Redis 集群好处 3. ...

  9. Jboss4集群配置【转】

    1.前言 2006年,Jboss公司被Redhat公司收购了.这直接导致Jboss产品结构调整,并将以前收费的Jboss AS文档改为免费.jijian91本次集群试验的最初依据就是由此得到的Jbos ...

最新文章

  1. 9.9元,2顿饭?中国的食品黑科技搞出了可以直接“喝的饭”
  2. 框架:初识Spring
  3. Mybatis学习第四天——一对一一对多
  4. Android常用的工具类
  5. Educational Codeforces Round 93 (Rated for Div. 2)
  6. python各种语言间时间的转化
  7. JS之返回字符首次出现位置的indexOf
  8. 大数据成长之路:谈谈那些必须学习的Linux基础知识
  9. 深度学习这么调参训练_深度学习训练的小技巧,调参经验(转)
  10. Sublime 格式化代码 快捷键以及插件使用
  11. centos 7 菜鸟第一天 找回win10
  12. [SDOI2012]Longge的问题 phi运用
  13. Java线程间通信方式
  14. VMware与宿主机同一网段
  15. 路径规划:RRT算法在ROS中的实现
  16. 用vue+vant框架写手机端
  17. 如何解决竞价推广中的恶意点击?
  18. 简单理解网络分层模型--向计算机网络迈一小jio;还会有后续;
  19. 双向链表的插入和删除
  20. 人脸识别与美颜算法实战-图像特效

热门文章

  1. Android——android:gravity 和 android:layout_Gravity
  2. 安装centos6.0 未找到任何驱动器
  3. 世界上最遥远的距离(泰戈尔)
  4. RequestDispatcher.forward() 与 HttpServletResponse.sendRedirect()的区别
  5. 【Hibernate】getHibernateTemplate与getSession的区别以及优缺点
  6. QTP的那些事--终极项目脚本设计思路及其测试查询功能的一些实际项目体会
  7. TypeError: atlas.getSpriteFrame is not a function
  8. 信息时代把数据当成了信息,互联网让数据真正发挥出价值,让人们相信人眼看不见的数据世界。...
  9. 项目笔记:2017年(SSM架构)
  10. [PE格式分析] 3.IMAGE_NT_HEADER