首页 » PHP教程 » rabbitmqphpamqp技巧_一文说清JMSAMQPActiveMQRabbitMQKafkaRocketMQ联系

rabbitmqphpamqp技巧_一文说清JMSAMQPActiveMQRabbitMQKafkaRocketMQ联系

duote123 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

序言

可能你在没学中间件之前都已经听过很多观点了,JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ,一个中间件怎么能搞出怎么多观点?乱不乱啊,别烦,本文从历史的角度帮你理清这些MQ和协议之间的关系。

什么是中间件?

中间件属于分布式系统中的一个子系统,关注于数据的发送和吸收,利用高效可靠的通报机制对分布式系统中的别的各个子系统经进行集成

rabbitmqphpamqp技巧_一文说清JMSAMQPActiveMQRabbitMQKafkaRocketMQ联系

中间件的利用场景1.异步处理

非核心流程异步化,提高系统相应性能

rabbitmqphpamqp技巧_一文说清JMSAMQPActiveMQRabbitMQKafkaRocketMQ联系
(图片来自网络侵删)

原来用户注册一下可能得依次写数据库,发送邮件和短信后,才能提示用户注册成功现在只要写数据库,写行列步队后就直接提示用户注册成功,发送邮件和短信是异步处理,提高了相应速率

2.运用解耦

系统不是强耦合,接管者可以随意增加,而不须要修正发送者的代码。
发送者的成功不依赖接管者

rpc实现

行列步队实现

如果库存系统出了问题,用户就不能正常下单,这是不合理的。
可以通过行列步队来解耦。
当有新的系统如广告系统对用户的订单也感兴趣的时候,只须要从行列步队中拿即可,订单系统完备不用改变

3.流量削峰

当高下游系统处理能力存在差距的时候,可以用行列步队进行缓冲

当有秒杀业务时,一下有大量要求涌入时,很可能造成系统瘫痪,此时可以用行列步队缓冲一下

4.日志处理

将行列步队用在日志处理中,比如Kafka可以用来办理大量日志传输的问题

5.通讯

行列步队一样平常都内置了高效的通信机制,因此也可以用于纯挚的通讯,比如实现点对点行列步队或者谈天室等

中间件编年史

1.初见曙光中间件实在出身的很早,在互联网运用还是一片荒漠的年代,有个在美国的印度哥们Vivek Ranadive就设想了一种通用软件总线,采取发布订阅的模式,像主板上的总线一样供其他相应程序接入。
他创办了一家公司Teknekron,实现了天下上第一个中间件The Information Bus(TIB)

2.各自为战TIB受到了企业的欢迎,Teknekron的业务发展引起了当时最牛气的IT公司IBM的把稳,于是他们也开始研发了自己行列步队软件,于是才有了后来的wesphere mq,微软也陆续加入了战团。
由于商业壁垒,商业MQ供应商想要办理运用互通的问题,而不是去创建标准来实现不同MQ产品间的互通,或者许可运用程序变动MQ平台

3.劫制天下为了冲破这个壁垒,同时为了能够让在各个行列步队平台间互融互通, JMS (Java Message Service) 应运而生 。
JMS 试图通过供应公共 Java API 的办法,隐蔽单独 MQ 产品供应 商供应的实际接口,从而超过了壁垒,以及办理了互通问题。
从技能上讲, Java 运用程序只需 针对 JMS API 编程,选择得当的 MQ 驱动即可, JMS 会打理好其他部分 。
ActiveMQ 便是 JMS 的 一种实现 。
不过考试测验利用单独标准化接口来胶合浩瀚不同的接口,终极会暴露出问题,使得 运用程序变得更加薄弱 。
以是急需一种新的通信标准化方案 。

4.一统江湖4.在 2006 年 6 月,由 Cisco 、 Redhat 、iMatix 等联合制订了 AMQP 的公开标准,由此 AMQP 登上了历史的舞台 。
它是运用层协议的一个开放标准,以办理浩瀚中间件的需求和拓扑结 构问题 。
它为面向的中间件设计,基于此协议的客户端与中间件可通报,并不受 产品、开拓措辞等条件的限定 。

5.合久必分LinkedIn在实现行列步队的时候以为AMQP规范并不适宜自己,以是Kafka并不支持AMQP协议。
RocketMQ在实现上借鉴了Kakfa的思想,以是也不支持AMQP协议,并且你会创造在Kafka和RocketMQ中都有类似Topic和Consumer Group的观点,而这些观点在AMQP协议中是不存在的

如何选择中间件

ActiveMQ 的社区算是比较成熟,但是较目前来说,ActiveMQ 的性能比较差,而且版本迭代很慢,不推举利用。
RabbitMQ 在吞吐量方面虽然稍逊于 Kafka 和 RocketMQ ,但是由于它基于 erlang 开拓,以是并发能力很强,性能极其好,延时很低,达到微秒级。
但是也由于 RabbitMQ 基于 erlang 开拓,以是海内很少有公司有实力做erlang源码级别的研究和定制。
如果业务场景对并发量哀求不是太高(十万级、百万级),那这四种行列步队中,RabbitMQ 一定是你的首选。
如果是大数据领域的实时打算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区生动度很高,绝对不会黄,何况险些是全天下这个领域的事实性规范。
RocketMQ 阿里出品,Java 系开源项目,源代码我们可以直接阅读,然后可以定制自己公司的MQ,并且 RocketMQ 有阿里巴巴的实际业务场景的实战磨练。
RocketMQ 社区生动度相对较为一样平常,不过也还可以,文档相对来说大略一些。
还有便是阿里出台的技能,你得应对这个技能万一被抛弃,社区黄掉的风险,如果你们公司有技能实力我以为用RocketMQ 挺好的Kafka 的特点实在很明显,便是仅仅供应较少的核心功能,但是供应超高的吞吐量,ms 级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展。
同时 Kafka 最好是支撑较少的 topic 数量即可,担保其超高吞吐量。
Kafka 唯一的一点劣势是有可能重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略。
Kafka天然适宜大数据实时打算以及日志网络。
AMQP协议详解

前面说到中间件有2种协议,JMS和AMQP。
JMS你可以类比为JDBC,搞了一套接口让不同厂商来实现这个接口,但是这个协议设计的确实不足优雅,因此就不先容这个协议了,除非你用ActiveMQ,不然学了真没啥用。
详细说一下AMQP协议,毕竟现在用RabbitMQ的公司还是很多的,要想学好RabbitMQ,AMQP协议是必须要清楚的。

AMQP协议模型

上图是AMQP协议中一个的流转过程,画的的很清楚,不详细先容了。

AMQP核心观点

先容一些AMQP协议常见的观点。

如果有用过ActiveMQ和RabbitMQ,对上面的名词一定不会陌生。
后面一篇文章就结合RabbitMQ来阐述上面的观点。

相关文章

介绍白点控制之路,从原理到方法

白点,作为生活中常见的现象,无处不在。对于如何控制白点,许多人却感到困惑。本文将从原理出发,探讨白点的控制方法,并结合实际案例,为...

PHP教程 2025-01-03 阅读1 评论0

介绍直播王者,如何开启你的电竞直播之旅

随着电竞产业的蓬勃发展,越来越多的年轻人投身于电竞直播行业。王者荣耀作为一款备受欢迎的MOBA手游,吸引了大量玩家和观众。如何开启...

PHP教程 2025-01-03 阅读1 评论0