消息队列 开发语言 协议支持 设计模式 持久化支持 事务支持 负载均衡支持 功能特点 缺点
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. java jdk中安装证书的步骤

    需要注意的是:导入证书时,请确认导入的JDK为当前程序运行所用的JDK,且路径是jdk目录下的jre目录路径,非与jdk同级的jre目录 首先你可以把需要导入的证书放在keytool的同级目录下,然后 ...

  2. JAVA THREAD.JOIN方法详解

    一.使用方式. join是Thread类的一个方法,启动线程后直接调用,例如: Thread t = new AThread(); t.start(); t.join(); 二.为什么要用join() ...

  3. wamp的搭建-个人笔记

    #wamp的配置 ##选项 1. 用apache 就下ts的 2. 是nginx或者iis 就用nts的 3. php win下面的 选择zip 或者msi的 ##apache的配置 1.配置apac ...

  4. JS高级-数据结构的封装

    最近在看了<数据结构与算法JavaScript描述>这本书,对大学里学的数据结构做了一次复习(其实差不多忘干净了,哈哈).如果能将这些知识捡起来,融入到实际工作当中,估计编码水平将是一次质 ...

  5. php回调函数的使用

    1.array_map — 将回调函数作用到给定数组的单元上 参数:array array_map ( callable $callback , array $arr1 [, array $... ] ...

  6. SQL SERVER大话存储结构(4)_复合索引与包含索引

              索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...

  7. 东正王增涛浅析OA信息化整合平台系统在企业中的应用价值

    王增涛说OA信息化整合平台系统作为企业管理中最基础的管理软件,已在企业成长道路上存在多年,它的应用开启了智能移动办公的先河,也让企业的办公流程管理更加的便捷.高效.流畅.省时.省力,它的使用不但让企业 ...

  8. Java中设计模式之工厂模式-4

    一.工厂模式由来 1)还没有工厂时代:假如还没有工业革命,如果一个客户要一款宝马车,一般的做法是客户去创建一款宝马车,然后拿来用. 2)简单工厂模式:后来出现工业革命.用户不用去创建宝马车.因为客户有 ...

  9. 每天一个Linux命令—— WC

    一.首先看一下帮助 Usage: wc [OPTION]... [FILE]...  or:  wc [OPTION]... --files0-from=F Print newline, word, ...

  10. Linux命令不熟悉(记录)

    1.回到上一次操作的目录 cd - 2.rz打开上传文件 rz 3.下载某个文件 wget httpdownload 4.根据名字查找文件 find / -name mysql 5.通配符删除 rm ...