原创 | Java全栈大联盟RabbitMQ系列之主流消息中间件介绍

Posted Java全栈大联盟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创 | Java全栈大联盟RabbitMQ系列之主流消息中间件介绍相关的知识,希望对你有一定的参考价值。

资源干货第一时间送达!

Java全栈大联盟
无套路资源共享 
无广告技术交流群
原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1) 原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1)




1、消息中间件概述

消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

MQ衡量指标:服务性能、数据存储、集群架构。


2、主流消息中间件介绍-ActiveMQ

        ActiveMQ是Apache出品最流行的开源消息总线,并且它是一个完全支持JMS规范的消息中间件。其丰富的API,多种集群构建模式使得它成为业界老牌消息中间件,在中小型企业中应用广泛。

        ActiveMQ默认的数据存储是kahadb存储。如果你想要保证消息存储百分之百可靠,也可以选择关系型数据库如mysql、oracle等。ActiveMQ性能不是特别好,面对超大规模并发时,总会出现各种小问题,比如阻塞,消息堆积过多产生一些延迟等等。如果不是特别大的并发,ActiveMQ是一个不错的选择。

        ActiveMQ集群架构模式分为两种:

        Master-slave模式(左):利用zk进行两个节点之间的协调,不一定两个节点,可能多个节点,但有一个主节点是对外提供服务的,另外的节点,它启动着,但是不对外提供服务。当主节点挂掉时,它利用zk进行一个高可用的切换,将slave节点切换成主节点,然后继续对外提供服务。

        Network模式(右):它其实是两组主备模式的集成,中间用network这种网关进行连接配置,就可以实现分布式的集群了。


原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1)



3、主流消息中间件介绍-KAFKA

        Kafka是Linkedln开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,kafka最开始设计的时候,就是是面向大数据方向的,一开始的目的是用于日志收集和传输,方便后续对大数据进行统计分析。0.8的版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。可见,这种MQ它只关注吞吐量强调高性能,分布式并发的读和写都非常快,但它对重复消费,消息丢失等问题不关注,因此,在使用Kafka时,需要考虑当前业务是否支持该模式。

        kafka集群模式也是依赖于zk,zk去进行协调和管理。每一个kafka节点之间可以进行复制,这个有点类似于数据的同步。只要有部署方案如跨机房部署,即使挂掉一个节点,另外两个节点上还会有数据。kafka是关注性能的,对于数据可靠性来讲,它的要求不是很高。


原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1)



4、主流消息中间件介绍-RocketMQ

        RocketMQ是阿里开源的消息中间件,目前也已经孵化成Apache顶级项目。它是纯JAVA开发,具有高吞吐量、高可用性、适合大规模分布式系统的特点。RocketMQ思路起源于Kafka,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理等场景。

        RocketMQ集群拓扑结构如下:

        因为可能需要频繁的对zk进行读写操作,所以zk被替换成了阿里自己搭建的性能更高的name server集群。中间是四个broker集群,master1对应了slave1,它可以实现主从的自动切换,主节点挂了,从节点自动切换成主节点,然后对外提供服务。


原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1)


对以上消息中间件总结如下:

ActiveMQ性能不是特别好,虽然API很完善,但面对高并发场景下直接被over了。适用于中小型公司。

Kafka主要强调高性能,做消息可靠性投递事情,必然不能选择kafka。比较适用于日志收集。

RocketMQ高性能同时又满足可靠性以及分布式,但缺点是商业版,需要收费。



5、主流消息中间件介绍-RabbitMQ

RabbitMQ是适用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布订阅)、可靠性和安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

RabbitMQ集群架构如下:


原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1)


多个节点作为RabbitMQ一组集群。节点之间采用镜像队列的方式,基于这种方式,可以保证数据百分百不丢失,前端可以去负载均衡,加上一些负载均衡组件,如HA-proxy进行TCP级别的负载。如果想做成高可用,需要借助于KeepAlived进行一个高可用的配置,如在前面加一个虚拟的VIP,通过访问VIP让它去路由到一个指定的负载均衡组件,然后再往下再去路由到某一个rabbitmq节点。

Rabbit优点:高可用,性能也非常好,而且稳定性超强,提供各种各样的集群恢复手段。比如节点挂掉了,磁盘损坏了,它也可以进行修复。


 精彩内容 


原创 | 【Java全栈大联盟】RabbitMQ系列之主流消息中间件介绍(1)


本文版权归Java全栈大联盟)作者和微信公众平台共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。 如果您认为这篇文章还不错或者有所收获,您可以通过下边的“打赏”功能 打赏我一杯咖啡【物质支持】,也可以点击右下角的【点赞】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!


看完本文有收获?请转发分享给更多人

关注「Java全栈大联盟」,提升大神技能

  


欢迎新旧粉丝(撒花),我是Java全栈大联盟安妮。大家对微信博文有什么问题都可以@我留言,我会尽快回复大家。希望以后可以和各位成为技术道友!


安妮


以上是关于原创 | Java全栈大联盟RabbitMQ系列之主流消息中间件介绍的主要内容,如果未能解决你的问题,请参考以下文章

HTML系列W3C联盟指定标准及HTML骨架

小白程序要进阶系列之RabbitMQ-前言

Docker下RabbitMQ四部曲之三:细说java开发

10Python全栈之路系列之深浅拷贝标准库系列之datetime模块

7Python全栈之路系列之Django表单

1Python全栈之路系列之面向基础