几种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的原理, ...
随机推荐
- linux下登陆MongoDB的两种方式
第一种:不带auth认证的 第二种:需要带auth认证的(即需要用户名和密码的) 当指定用户名和密码在查看数据,发现就可以看得到了 查看文章:开启MongoDB客户端访问控制
- 添加本地jar包到本地的Maven仓库以及在Maven仓库中搜索想要添加的jar包
今天在学习Memacached的时候,将java_memcached-release下载下来,要使用maven来集成相关的jar包,Memcached的jar包如下: java_memcached-r ...
- Java学习笔记——排序算法之进阶排序(堆排序与分治并归排序)
春蚕到死丝方尽,蜡炬成灰泪始干 --无题 这里介绍两个比较难的算法: 1.堆排序 2.分治并归排序 先说堆. 这里请大家先自行了解完全二叉树的数据结构. 堆是完全二叉树.大顶堆是在堆中,任意双亲值都大 ...
- 看完48秒动画,让你不敢再登录HTTP网站(附完整示例代码)
在我的 单点登录SSO示例代码 一文中,强烈不建议部署HTTP的SSO服务站点. 在此写个基于网络包嗅探的HTTP会话劫持程序,给大家一个直观的危害性展示. 示例中,我在一台Mac上登录58同城,被另 ...
- Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)
基于Spring-4.3.7.RELEASE Spring的配置不仅仅局限在XML文件,同样也可以使用Java代码来配置.在这里我使用XML配置文件的方式来粗略地讲讲WebApplicationCon ...
- Java中的栈上分配
博客搬家自https://my.oschina.net/itsyizu/blog/ 什么是栈上分配 栈上分配是java虚拟机提供的一种优化技术,基本思想是对于那些线程私有的对象(指的是不可能被其他线程 ...
- 【JavaScript你需要知道的基础知识~】
最近开始学习JavaScript,整理了一些相关的基础知识 JS注释方式:// 单行注释(Ctrl+/ )/* 段落注释(Ctrl+shift+/ )*/ [JavaScript基础]JavaScri ...
- 11、借助POI实现Java生成并打印excel报表(2)
11.POI打印功能 11.1.常用模块形式: HSSFPrintSetup printSetup = sheet.getPrintSetup(); printSetup.setVResolution ...
- (转ORCLE导入导出命令)
oracle数据库导入导出命令! Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份. 大多情况都可以用Oracle数据导入导出 ...
- 【Netty】Netty传输
一.前言 在简单学习了Netty中的组件后,接着学习Netty中数据的传输细节. 二.传输 2.1 传输示例 Netty中的数据传输都是使用的字节类型,下面通过一个实例进行说明,该实例中服务器接受请求 ...