初识JMIS与其专业术语

小伙伴们大家好,现在我们和大家一起了解一下古老而又神秘的消息中间件"ActiveMQ"。首先,说起ActiveMQ,就必须先聊聊JMS (Java Message Service)规范,也就是Java消息服务,它定义了Jav a中访问消息中间件的接口的规范。在这里注意哦,JMS只是接口,,并没有给予实现,实现JMS接口的消息中间件称为"IMS Provider ",目前知名的开源 MOM(Message Oriented Midleware,也就是消息中间件)系统包括Apache的ActiveMQ、RocketMQ、Kafka,以及RabbitMQ,可以说他们都"基本遵循"或"参考"JMS规范,都有自己的特点和优势。

  • 专业术语

    • JMS(Java Message Service)∶实现JMS接口的消息中间件;
    • Provider(MesageProvider)∶消息的生产者;● Consumer(MessageConsumer)∶消息的消费者;● PTP(Point to Point)∶即点对点的消息模型,这也是非常经典的模型;
    • Pub/Sub(Publish/Subscribe)∶,即发布/订阅的消息模型;
    • Queue∶ 队列目标,也就是我们常说的消息队列,一般都是会真正的进行物理存储;
    • Topic∶主题目标;
    • ConnectionFactory∶连接工厂,JMS用它创建连接;● Connection JMS 客户端到JMS Provider 的连接;● Destination∶消息的目的地;
    • Session∶会话,一个发送或接收消息的线程(这里Session可以类比Mybatis的Session);
  • JMS 消息格式定义∶
    • StreamMessage 原始值的数据流
    • MapMessage 一套名称/值对
    • TextMessage 一个字符串对象
    • BytesMessage 一个未解释字节的数据流
    • ObjectMessage 一个序列化的Java对象

了解ActiveMQ

ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在早些的"J2EE应用"时期扮演着特殊的地位,可以说那个年代ActiveMQ在业界应用最广泛,当然如果现在想要有更强大的性能和海量数据处理能力,ActiveMQ还需要不断的升级版本,不断的提升性能和架构设计的重构。

就算现在我们80%以上的业务我们使用ActiveMQ已经足够满足需求,其丰富的API、多种集群构建模式使得他成为业界老牌消息中间件,在中小型企业中应用广泛!

当然如果你想针对大规模、高并发应用服务做消息中间件技术选型,譬如淘宝、京东这种大型的电商网站,尤其是双11这种特殊时间,ActiveMQ可能就显得力不从心了,当然我们这里后续还会和大家介绍其他非常优秀的MOM咯。

消息投递模式

废话不多说,我们首先要了解JMS规范里最经典的两种消息投递模式,即"点对点"与"发布订阅"。

  • 点对点∶生产者向队列投递一条消息,只有一个消费者能够
    监听得到这条消息(PTP),下图所示∶

  • 发布订阅∶生产者向队列投递一条消息,所有监听该队列的
    消费者都能够监听得到这条消息(P/S),下图所示∶

ActiveMQ各项指标

衡量一个MOM,我们主要从三方面考虑即可,即服务性能、存储堆积能力、可扩展性。

  • 服务性能

    • ActiveMQ的性能一般,在早期传统行业为王的时代还是比较流行的,但现如今面对高并发、大数据的业务场景,往往力不从心!
  • 数据存储
    • 默认采用kahadb存储(索引文件形式存储),也可以使用高性能的google leveldb(内存数据库存储),或者可以使用MySql、Oracle进程消息存储(关系型数据库存储)。
  • 集群架构
    • ActiveMQ 可以与zookeeper进行构建 主备集群模型,
      并且多套的主备模型直接可以采用Network的方式构建分布式集群。

ActiveMQ集群架构模式

ActiveMQ最经典的两种集群架构模式,Master-Slave、Network 集群模式!

  • Master-Slave:

  • Master-Slave∶顾名思义,就是主从方式,当然这里要理解为主备的方式,也就是双机热备机制;Master Slave背后的想法是,消息被复制到slave broker,因此即使master broker 遇到了像硬件故障之类的错误,你也可以立即切换到slave b roker而不丢失任何消息。Master Slave是目前ActiveMQ推荐的高可靠性和容错的解决方案。

  • 架构思考∶ Master-Slave集群模型的关键点∶

    • 上图(Master-Slave)绿色的为主节点,灰色的则为备份节点,这两个节点都是运行状态的。
    • zookeeper的作用就是为了当绿色的主节点宕机时,进行及时切换到备份的灰色节点上去,使其进行主从角色的互换,用于实现高可用性的方案。
    • Master-Slave集群模型的缺点也显而易见,就是不能做到分布式的topic、queue,当消息量巨大时,我们的MQ集群压力过大,没办法满足分布式的需求。
  • Nerwork:

  • Network∶这里可以理解为网络通信方式,也可以说叫Network ofbrokers。这种方式真正解决了分布式消息存储和故障转移、broker切换的问题。可以理解消息会进行均衡;从Ac tiveMQ1.1版本起,ActiveMQ支持networks ofbrokers。它支持分布式的queues和topics。一个broker会相同对待所有的订阅(subscription)∶不管他们是来自本地的客户连接,,还是来自远程broker,它都会递送有关的消息拷贝到每个订阅。远程broker得到这个消息拷贝后,会依次把它递送到其内部的本地连接上。

  • 架构思考∶Network集群模型的关键点∶

    • 首先,这种方案需要两套或多套(Master-Slave)的集群模型才可以搞定,部署非常麻烦,需要两套或多套集群直接相互交叉配置,相互间能够感知到彼此的存在。下面我给出一段XML配置,简单来说就是在ActiveMQ的配置文件里要进行多套(Master-Sla ve)之间的 networkConnector配置工作∶
<broker brokerName="receiver" persistent="f alse" useJmx=" false"><transportConnectors><transportConnector uri="tcp://localhost:62002" /></transportConnectors><networkConnectors><networkConnectoruri="static:( tcp://localhost:61616,tcp://remotehost:61616)"/></ networkConnectors>
</broker>
  • 其次,Network虽然解决了分布式消息队列这个难题,但是还有很多潜在的问题,最典型的就是资源浪费问题,并且也可能达不到所预期的效果;通常采用Master-Slave模型是传统型互联网公司的首选,作为互联网公司往往会选择开箱即用的消息中间件,从运维、部署、使用各个方面都要优于ActivcMQ,当然ActiveMQ毕竟是"老牌传统强Q",Apache的顶级项目之一,目前正在进行新版本的重构(对于5.X 版本)与落地,下一代"Artemis代理",也可以理解为"6.X";有兴趣的小伙伴可以关注一下官网,传送门如下∶https∶//activemq.apache.org/

ActiveMQ集群架构与原理解析相关推荐

  1. 一文道明Redis集群架构工作原理及搭建

    文章目录 前言 一.Redis-Cluster(集群)长什么样子? 二.Redis-Cluster集群搭建 1. Redis集群搭建 2. 客户端测试 3. 增加主节点(6000)到集群环境中 4. ...

  2. 互联网公司分布式集群架构图入门解析(简单通俗易懂,超详细)

    一.小型公司网络架构 狗子是某大学计算机专业本科应届毕业生,由于自己的技术不错,再加上互联网产业的巨大利润的驱使,狗子决定走上创业这条路,于是,狗子联合了同学二黑,鸡子,狗蛋等人花费了几个月的时间写出 ...

  3. MySQL架构原理(七)集群架构和主从模式部署

    目录 集群架构设计 架构设计理念 可用性设计 一致性设计 主从模式 适用场景 实现原理 主从复制 半同步复制 并行复制 MySQL 5.6并行复制原理 MySQL 5.7并行复制原理 MySQL8.0 ...

  4. 那些年用过的Redis集群架构(含面试解析)

    作者:孤独烟,平安银行资深后端工程师一枚! 引言 今天是2019年2月13号,也就是大年初九,我接到了高中同学刘有码面试失利的消息. 他面试的时候,身份是某知名公司的小码农一枚,却因为不懂自己生产上R ...

  5. Zookeeper的集群架构以及读写原理

    本文来说下Zookeeper的集群架构以及读写原理 文章目录 总体架构 Session Quorum模式 搭建3节点ZooKeeper集群 本文小结 总体架构 应用使用 ZooKeeper 客户端库来 ...

  6. 技术分享 | Redis 集群架构解析

    作者:贲绍华 爱可生研发中心工程师,负责项目的需求与维护工作.其他身份:柯基铲屎官. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.集群架构的 ...

  7. Redis集群架构搭建和原理

    Redis集群架构教程 Redis常见的架构有主从.哨兵.高可用集群,接下来的文章分四章分别介绍linux安装redis.主从架构搭建.哨兵模式搭建.集群架构搭建 第一章 Redis的安装 我的cen ...

  8. RocketMQ的组织架构和基本概念,Dledger高可用集群架构原理

    文章目录 1. MQ产品介绍 2. rocketMQ组织架构 ①:NameServer ②:Broker ③:生产者(Producer) ④:消费者(Consumer) ⑤:主题(Topic) ⑥:消 ...

  9. 错过必定后悔的干货!深入解析大数据行业的集群架构方案

    随着大数据的日益普及,很多人对大数据越来越感兴趣,有些程序开发者也跃跃欲试,但是苦于不会搭建集群环境,而常常被拦在大数据的门槛之外. 通过这次疫情,我相信各位也看见了,大数据真的很重要.从患者数字地图 ...

最新文章

  1. 新书上市 | 数学不好,Python不行,还能入门机器学习吗?
  2. python expect模块_成为顶级黑客--python绝技 阅读笔记(五)
  3. iOS推送小结--swift语言
  4. 新手怎样学习C语言C++?
  5. rabbitmq可靠性投递_RabbitMQ 可靠投递
  6. 我眼中的《APUE》
  7. 极客大挑战基础部分解题过程
  8. alfafile中转站免费_免费、不限速的文件中转站or网盘
  9. 智媒链全球社区见面会 中国·北京(首场)
  10. 设计模式之禅【迭代器模式】
  11. 机器视觉硬件——工业相机
  12. HTML5 新的 Input 类型
  13. js中的隐式类型转换有哪些
  14. 对话bot语音输入交互竞品调研
  15. 2021年T电梯修理考试报名及T电梯修理考试试卷
  16. 【ASM】ASM基础知识
  17. java –cp ./:_7位专家– 7条意见:您如何看待新的Java发布周期?
  18. python二级第十二套答案
  19. 【Idea调试】Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:3.0.1
  20. react-prev

热门文章

  1. 拼图游戏---java实现
  2. 百元耳机性价比之王、适合学生党的蓝牙耳机品牌
  3. C语言打印 *平行四边形
  4. Windows:Arm,我们不合适
  5. Random Sample Consensus: A Paradigm for Model Fitting
  6. 使用react-native-vector-icons中出现图标问号
  7. 网上可以打印参保证明吗?
  8. android 浏览器 cookie,从Android的浏览器中传递cookie数据到App中
  9. 【MQTT学习1】MQTT协议的基本了解
  10. RSA算法原理【超清晰】