消息队列入门(二)消息队列的规范和开源实现

简介:

AMQP规范

AMQP 是 Advanced Message Queuing Protocol,即高级消息队列协议。AMQP不是一个具体的消息队列实现,而 是一个标准化的消息中间件协议。目标是让不同语言,不同系统的应用互相通信,并提供一个简单统一的模型和编程接口。
目前主流的ActiveMQ和RabbitMQ都支持AMQP协议。

AMQP相关的角色和职责

Producer 消息生产者

一个给exchange发送消息的程序,发送方式大致是:它首先创建一个空消息,然后填上内容、路由KEY,最后发送给exchange

Routing Key 消息特征

一个字符串,exchange用之来决定应该该消息投递给哪个queue。(开始时queue已向exchange绑定它所关心消息的routingKey)

Exchange 交换器

接收来自producers的消息,并根据该消息的routingKey,将该消息投递到正确的queues

Binding 绑定操作

前期将queue所想要的消息特征告诉exchange。Exchange以后收到消息,就按照这个规则来投递

Queue 消息容器
在MQ server(实现为broker方式)里面的queue,持有Consumer想要的消息

Consumer 消息接收者
从MQ server得到想要的消息,它负责创建、主动订阅、共享、使用、破坏queue和binding

JMS规范

JMS是Java平台的一部分,是一种应用于异步消息传递的标准API,JMS可以允许不同应用、不同模块之间实现可靠、异步数据通信。

在JMS中,支持两种消息模型,点对点(Point-to-point)和发布-订阅(Publish and subscribe)
这两种模式分别对应于JMS中的两种消息目标(Message Destination):队列及主题(queue/topic)

在点对点模型中,每个消息都有一个发送者和一个接收者,消息中介(broker)收到发送者的消息,会将消息放入队列中,而接收者请求并接收队列中的一条消息后,这条消息就会从队列中删除。
消息队列中的每条消息只能投递给一个接收者,但并不意味着只能使用一个接收者从队列中取消息,根据业务需要,可以使用多个接收者同时从队列中请求消息,分担处理压力。
但是需要注意的是,单个接收者收到的消息是按照发送顺序的,多个接收者因为多线程的关系,并不能保证收到的消息一定是原序的。

在发布-订阅模式中,消息会发送给一个主题,但是与点对点模式不同的是消息不再只被投递给一个接收者,而是所有此主题的订阅者都会收到该消息。

消息队列的主要开源实现

ActiveMQ

ActiveMQ 是Apache出品,目前非常流行的开源消息中间件。ActiveMQ 支持JMS规范,同样也支持AMQP协议。
在下面的博客里,将会较深入的学习ActiveMQ的设计和应用。

RabbitMQ

RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,开发语言是以高性能、健壮以及可伸缩性出名的 Erlang 。

RocketMQ

RocketMQ 是阿里的一款分布式、队列模型的消息中间件。
项目地址 https://github.com/alibaba/RocketMQ
软件文档 https://github.com/alibaba/RocketMQ/wiki

 

三种消息队列的比较 

 

ActiveMQ 

 

优点:成熟的产品,已经在很多公司得到应用(非大规模场景)。有较多的文档。 各种协议支持较好,有多重语言的成熟的客户端;

 

缺点:根据其他用户反馈,会出莫名其妙的问题,会丢失消息。其重心放到activemq6.0产品—apollo上去了,目前社区不活跃,且对 5.x 维护

 

较少;Activemq 不适合用于上千个队列的应用场景

 

RabbitMQ 

 

优点:由于erlang语言的特性, mq性能较好;管理界面较丰富,在互联网公司也有较大规模的应用;支持 amqp 系诶,有多中语言且支持amqp 的客户端可用

 

缺点:erlang语言难度较大。集群不支持动态扩展。

 

RocketMq

 

优点:模型简单,接口易用(JMS的接口很多场合并不太实用)。 在阿里大规模应用。 目前支付宝中的余额宝等新兴产品均使用rocketmq。 

 

集群规模大概在50 台左右,单日处理消息上百亿;性能非常好,可以大量堆积消息在broker 中;支持多种消费,包括集群消费、广播消费等。 开发度较活跃,版本更新很快。

 

缺点:产品较新,文档比较缺乏。没有在 mq核心中去实现JMS 等接口,对已有系统而言不能兼容。阿里内部还有一套未开源的 MQ API,这一层 API可以将上层应用和下层 MQ 的实现

 

解耦。

摘自 各种消息队列对比

 

 

本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/4763766.html,如需转载请自行联系原作者

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件 Dubbo Java
Spring全家桶 、Dubbo、分布式、消息队列后端必备全套开源项目
基于 Spring Boot 2.X 版本的深度入门教程。 市面上的 Spring Boot 基础入门文章很多,但是深度入门文章却很少。对于很多开发者来说,入门即是其对某个技术栈的最终理解,一方面是开发者“比较懒”,另一方面是文章作者把 Spring Boot 入门写的太浅,又或者不够全面。
|
21天前
|
消息中间件 弹性计算 运维
一图看懂云消息队列 RabbitMQ 版对比开源优势
一张图带您快速了解云消息队列 RabbitMQ 版对比开源版本的显著优势。
|
5月前
|
消息中间件 新零售 弹性计算
云消息队列 RabbitMQ 版入门训练营,解锁对比开源优势与零基础实战
欢迎加入「云消息队列 RabbitMQ 版入门训练营」。
171 15
|
6月前
|
消息中间件 RocketMQ
消息队列 MQ产品使用合集之在开源延时消息插件方案中和原生延时消息方案中,同时设置参数是否会出现错乱
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
6月前
|
消息中间件
RabbitMQ是一个功能强大的开源消息代理软件,用于处理消息队列
RabbitMQ是一个功能强大的开源消息代理软件,用于处理消息队列
45 0
|
消息中间件 存储 Cloud Native
云原生开源开发者沙龙「微服务X消息队列专场」
云原生开源开发者沙龙「微服务X消息队列专场」
|
7月前
|
消息中间件 存储 负载均衡
简单入门:消息队列的概念和应用
在复杂的系统架构中,组件间的通信是至关重要的问题。消息队列作为一种解决方案,能够使组件之间的通信更加高效、可靠。本文将从简单到复杂,逐步向您介绍消息队列的概念、使用场景以及如何实现。
293 3
|
7月前
|
消息中间件 存储 Kafka
MQ消息队列学习入门
MQ消息队列学习入门
120 0
|
消息中间件 Cloud Native 开发者
云原生开源开发者沙龙「微服务X消息队列专场」
「8月27日深圳」云原生开源开发者沙龙微服务X消息队列专场
784 1
云原生开源开发者沙龙「微服务X消息队列专场」
|
消息中间件 Cloud Native 开发者
关于云原生开源开发者沙龙「微服务X消息队列专场」的延期通知
关于云原生开源开发者沙龙「微服务X消息队列专场」的延期通知