几种MQ消息队列对比与消息队列之间的通信问题
| 消息队列 | 开发语言 | 协议支持 | 设计模式 | 持久化支持 | 事务支持 | 负载均衡支持 | 功能特点 | 缺点 |
| 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消息队列对比与消息队列之间的通信问题的更多相关文章
- 消息服务MNS和消息队列ONS产品对比
消息服务MNS和消息队列ONS产品对比 MNS已经进过严格测试,已达到商业化的稳定性要求,其主要特点和适用场景 1.数据高可靠(10个9),对于数据可靠性敏感(要求消息数据不丢)的应用场景建议选择. ...
- 消息通讯之关于消息队列MQ必须了解的相关概念
目录 系统通讯方式有哪些? 消息队列的应用场景 消息队列通讯模型 常见的消息协议 AMQP MQTT ATOMP JMS 小结 系统通讯方式有哪些? RPC调用 RPC 全称 Remote Proce ...
- Qt事件机制(是动作发生后,一种通知对象的消息,是被动与主动的总和。先处理自己队列中的消息,然后再处理系统消息队列中的消息)
Qt事件机制 Qt程序是事件驱动的, 程序的每个动作都是由幕后某个事件所触发.. Qt事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. Qt事件的类型很多, 常见的qt的事件如下: 键盘事 ...
- 【MQ】java 从零开始实现消息队列 mq-02-如何实现生产者调用消费者?
前景回顾 上一节我们学习了如何实现基于 netty 客服端和服务端的启动. [mq]从零开始实现 mq-01-生产者.消费者启动 [mq]java 从零开始实现消息队列 mq-02-如何实现生产者调用 ...
- JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)
最近的项目中用到了mq,之前自己一直在码农一样的照葫芦画瓢.最近几天研究了下,把自己所有看下来的文档和了解总结一下. 一. 认识JMS 1.概述 对于JMS,百度百科,是这样介绍的:JMS即Java消 ...
- ArrayBlcokingQueue,LinkedBlockingQueue与Disruptor三种队列对比与分析
一.基本介绍 ArrayBlcokingQueue,LinkedBlockingQueue是jdk中内置的阻塞队列,网上对它们的分析已经很多,主要有以下几点: 1.底层实现机制不同,ArrayBlco ...
- rabbitmq消息队列,消息发送失败,消息持久化,消费者处理失败相关
转:https://blog.csdn.net/u014373554/article/details/92686063 项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败. ...
- RabbitMQ,RocketMQ,Kafka 消息模型对比分析
消息模型 消息队列的演进 消息队列模型 发布订阅模型 RabbitMQ的消息模型 交换器的类型 direct topic fanout headers Kafka的消息模型 RocketMQ的消息模型 ...
- MQ系列5:RocketMQ消息的发送模式
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 在之前的篇章中,我们学习了RocketMQ的原理, ...
随机推荐
- swap与dd命令使用详解
处理交换文件和分区 交换分区是系统RAM 的补充 基本设置包括: 创建交换分区或者文件 使用mkswap 写入特殊签名 在/etc/fstab 文件中添加适当的条目 使用swapon -a 挂载交换分 ...
- Spring IOC的使用
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性.所谓依 ...
- @JsonFormat 日期格式自动格式化
通常日期格式都是以时间戳的形式存放在数据库里,当前端页面通过接口查询时,我们会将一个对象的某些属性查出来返回给页面. 例如,某个类里面有个属性 Timestamp create_time 给这个对象实 ...
- [原创]Nexus5 源码下载、编译、真机烧录过程记录
asop使用清华镜像源https://mirror.tuna.tsinghua.edu.cn/help/AOSP/ 一开始使用每月初始化包的方式因为无法搞定版本的问题,没能通过编译,无奈,老老实实一点 ...
- UIWebView 跳过HTTPS证书认证
UIWebView跳过证书认证 在UIWebView中加入如下代码即可(Error Domain=NSURLErrorDomain Code=-1202) //跳过证书验证 @interface NS ...
- MySQL主从同步报错故障处理集锦
前言 在发生故障切换后,经常遇到的问题就是同步报错,下面是最近收集的报错信息. 记录删除失败 在master上删除一条记录,而slave上找不到 Last_SQL_Error: Could not e ...
- 基于R语言的梯度推进算法介绍
通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Bo ...
- 走进JavaScript——重拾对象
创建对象 Object构造器的参数如果为空或null.undefined将返回一个空的Object对象,如果为其他值则调用相应的构造器,如 new Object() // Object {} new ...
- webpack 初识
Webpack介绍 webpack 官网 http://webpack.github.io/docs/ webpack 中文地址:https://doc.webpack-china.org/ webp ...
- 一篇%3CDIV%20style%3D%22FONT-SIZE%
%3CDIV%20style%3D%22FONT-SIZE%3A%2016px%22%3E1%EF%BC%8C%E6%88%91%E4%BB%A5%E4%B8%BA%E7%BB%88%E6%9C%89 ...