消息队列 开发语言 协议支持 设计模式 持久化支持 事务支持 负载均衡支持 功能特点 缺点
RabbitMQ Erlang AMQP,XMPP,SMTP,STOMP 代理(Broker)模式(消息在发送给客户端时先在中心队列排队) 支持持久化到文件 不支持 支持

性能较好;管理界面较丰富;在互联网公司有较大规模的应用;

设计的核心是保证消息正确递交(认为消费者是一直处于活动状态去消费消息的),

因此设计的比较重,需要记录很多状态

虽然产品开源,但Erlang语言应用不够普遍;

集群不支持动态扩展

ZeroMQ C++

ZeroMQ是一个并发框架做的socket库

(是一个传输层API库),并不是真正的消息队列/消息中间件

点对点模式,通过引用ZeroMQ程序库,

在应用之间发送消息,任何应用程序节点都可作为一个MQ

不支持 不支持 不支持 低延时,高性能,最高每秒43万条消息 非持久性队列,宕机后数据将会丢失
ActiveMQ Java OpenWire,Stomp REST,WS Notification,XMPP,AMQP,JMS 支持代理模式,也支持点对点模式 支持持久化到文件或数据库 支持 支持

成熟的产品,在很多公司得到应用;有较多的文档;各种协议支持较好,

有多种语言的成熟的客户端;完全支持JMS1.1和J2EE 1.4规范

(持久化,XA消息,事务);支持Spring,可以很容易内嵌到使用Spring的系统里

根据其他用户反馈,会出现丢失消息的问题;

其重心已放到下一代产品Apollo,目前社区不够活跃,对 5.x 维护较少

关于消息队列之间的通信问题,可以通过采用ActiveMQ的Broker Cluster集群方式实现,ActiveMQ的集群方式主要由两种:Master Slave和Broker Cluster。

1、Master Slave集群方式:Master提供服务,Slave实时备份Master的数据,以保证消息的可靠性。当Master失效时,Slave自动升级为Master,客户端自动连接到Slave;

2、Broker Cluster集群方式:在多个ActiveMQ实例之间进行消息的路由。如:生产者应用连接一个ActiveMQ实例,称为MQ1,所有消息都由该实例提供。两个消费者应用分别连接另外两个ActiveMQ实例,分别为MQ2和MQ3,两个消息消费者需要消费MQ1上的消息,但它们连接的都不是MQ1,可以通过该集群方式方式把MQ1上的消息路由到MQ2和MQ3。

Broker Cluster的集群分为Static Discovery和Dynamic Discovery两种。

(1)Static Discovery 方式:通过硬编码的方式使用所有已知ActiveMQ实例节点的URI地址。为了保证消费者不因某个节点的失效而导致不能消费消息,在消费者应用中需要配置所有节点的URI。这种静态路由存在的原因可能是因为静态处理的方式使路由速度更快。

(2)Dynamic Discover 方式:在配置ActiveMQ实例时,不需要知道所有其它实例的URI地址,只需在所有实例的配置文件中进行相应设置,就可以实现消息在所有ActiveMQ实例之间进行路由。

Master Slave模式不支持负载均衡,但可以通过消息的实时备份或共享,保证消息服务的可靠性;Broker Cluster模式支持负载均衡,可以提高消息的消费能力,但不能保证消息的可靠性。

所以为了支持负载均衡,同时又保证消息的可靠性,可以采用Msater Slave与Broker Cluster相结合的模式。

几种MQ消息队列对比与消息队列之间的通信问题的更多相关文章

  1. 消息服务MNS和消息队列ONS产品对比

    消息服务MNS和消息队列ONS产品对比 MNS已经进过严格测试,已达到商业化的稳定性要求,其主要特点和适用场景 1.数据高可靠(10个9),对于数据可靠性敏感(要求消息数据不丢)的应用场景建议选择. ...

  2. 消息通讯之关于消息队列MQ必须了解的相关概念

    目录 系统通讯方式有哪些? 消息队列的应用场景 消息队列通讯模型 常见的消息协议 AMQP MQTT ATOMP JMS 小结 系统通讯方式有哪些? RPC调用 RPC 全称 Remote Proce ...

  3. Qt事件机制(是动作发生后,一种通知对象的消息,是被动与主动的总和。先处理自己队列中的消息,然后再处理系统消息队列中的消息)

    Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...

  4. 【MQ】java 从零开始实现消息队列 mq-02-如何实现生产者调用消费者?

    前景回顾 上一节我们学习了如何实现基于 netty 客服端和服务端的启动. [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]java 从零开始实现消息队列 mq-02-如何实现生产者调用 ...

  5. JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)

    最近的项目中用到了mq,之前自己一直在码农一样的照葫芦画瓢.最近几天研究了下,把自己所有看下来的文档和了解总结一下. 一. 认识JMS 1.概述 对于JMS,百度百科,是这样介绍的:JMS即Java消 ...

  6. ArrayBlcokingQueue,LinkedBlockingQueue与Disruptor三种队列对比与分析

    一.基本介绍 ArrayBlcokingQueue,LinkedBlockingQueue是jdk中内置的阻塞队列,网上对它们的分析已经很多,主要有以下几点: 1.底层实现机制不同,ArrayBlco ...

  7. rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关

    转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...

  8. RabbitMQ,RocketMQ,Kafka 消息模型对比分析

    消息模型 消息队列的演进 消息队列模型 发布订阅模型 RabbitMQ的消息模型 交换器的类型 direct topic fanout headers Kafka的消息模型 RocketMQ的消息模型 ...

  9. MQ系列5:RocketMQ消息的发送模式

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 在之前的篇章中,我们学习了RocketMQ的原理, ...

随机推荐

  1. python基础--异常,对象和迭代器

    异常处理 面向对象 迭代器和生成器 python异常处理 下面代码触发了一个FileNotFoundError >>> open("notexist.txt") ...

  2. Centos程序最小化后,窗口标签都消失找不到窗口的问题

    我是用的centos版本是CentOs 7. 在“顶部面板”或者 “底部面板” 右击选择“添加组件”),如下图所示: 在搜索框里输入“窗口列表”(window list),选中“窗口列表”即可.如下图 ...

  3. jQuery之文档处理

    jQuery 文档处理 1)内部插入 2)外部插入 3)包裹 4)替换 5)删除 6)复制 1.内部插入 append(content|fn) 向每个匹配的元素内部追加内容. 向所有段落中追加一些HT ...

  4. 18个你可能不相信是用CSS制作出来的东西

    与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和交互的能力,CSS集合HTML以及JavaScrip ...

  5. 【JAVAWEB学习笔记】14_response

    HttpServletResponse 学习目标 案例一.完成文件下载 案例二.生成验证码(了解) 1.HttpServletResponse概述 我们在创建Servlet时会覆盖service()方 ...

  6. bootstrap学习笔记之导航条基础

    导航条基础 导航条(navbar)和上一节介绍的导航(nav),就相差一个字,多了一个"条"字.其实在Bootstrap框架中他们还是明显的区别.在导航条(navbar)中有一个背 ...

  7. 12、借助Jacob实现Java打印报表(Excel、Word)

    12.使用Jacob来处理文档 Word或Excel程序是以一种COM组件形式存在的.如果能够在Java中调用相应组件,便能使用它的方法来获取文档中的文本信息.Jacob是一个JAVA到微软的COM接 ...

  8. java swing 添加 jcheckbox复选框

    总体上而言,Java Swing编程有两大特点:麻烦.效果差. 麻烦是说由于设计器的使用不方便(如果您希望使用窗体设计器通过快速拖拽控件建立您的Java Swing GUI程序,请您使用MyEclip ...

  9. tab切换插件开发

    我开发的tab切换插件,基于jquery库,实现tab标签页的切换.插件的名称为jquery.tabSwitch.js. 插件实现代码如下: ; (function ($) { $.fn.tabSwi ...

  10. maven spring mybatis配置注意点

    以下对使用maven配置spring+mybatis项目时,完成基本的配置需要添加的一些信息进行说明.仅对mybatis部分进行列举. maven添加mybatis支持 <!-- mybatis ...