我为什么要选用RabbitMQ 各种MQ选型对比 RabbitMQ简介

前言,是什么,队列是什么,咱们可以了解为信息队列,队列咱们可以了解为管道,以管道的方式做信息传递,场景,1.其实咱们在双11的时刻,当咱们清晨少量的秒杀和抢购商品,而后去结算的时刻,就会发现,界面会提示咱们,让咱们稍等,以及一些友好的图片文字提示,而不是像前几年的时代,动不动就页面卡死,报错等来出现给用户,在这业务场景中,咱们就可以驳…。

前言:

是什么?队列是什么,咱们可以了解为信息队列,队列咱们可以了解为管道。以管道的方式做信息传递。

场景:

1.其实咱们在双11的时刻,当咱们清晨少量的秒杀和抢购商品,而后去结算的时刻,就会发现,界面会提示咱们,让咱们稍等,以及一些友好的图片文字提示。而不是像前几年的时代,动不动就页面卡死,报错等来出现给用户。

在这业务场景中,咱们就可以驳回队列的机制来处置,由于同时结算就只能到达这么多。

2.在咱们往常的超市中购物也是一样,当咱们在结算的时刻,并不会一窝蜂一样涌入收银台,而是排队结算。这也是队列机制。

对,就是排队。一个接着一个的处置,不能插队。

RabbitMQ简介

AMQP,即Advanced Message Queuing Protocol,初级信息队列协定,是运行层协定的一个开通规范,为面向信息的两边件设计。信息两边件关键用于组件之间的解耦,信息的发送者无需知道信息经常使用者的存在,反之亦然。AMQP的关键特色是面向信息、队列、路由(包含点对点和颁布/订阅)、牢靠性、安保。RabbitMQ是一个开源的AMQP成功,主机端用Erlang言语编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在散布式系统中存储转发信息,在易用性、裁减性、高可用性等方面体现不俗。上方将重点引见RabbitMQ中的一些基础概念,了解了这些概念,是经常使用好RabbitMQ的基础。

ConnectionFactory、Connection、Channel

ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协定关系局部逻辑。ConnectionFactory为Connection的制造工厂。Channel是咱们与RabbitMQ打交道的最关键的一个接口,咱们大局部的业务操作是在Channel这个接口中成功的,包含定义Queue、定义Exchange、绑定Queue与Exchange、颁布信息等。

Queue(队列)是RabbitMQ的外部对象,用于存储信息,用下图示意。

RabbitMQ中的信息都只能存储在Queue中,消费者(下图中的P)消费信息并最终投递到Queue中,消费者(下图中的C)可以从Queue中失掉信息并消费。

多个消费者可以订阅同一个Queue,这时Queue中的信息会被平均摊派给多个消费者启动处置,而不是每个消费者都收到一切的信息并处置。

Message acknowledgment

在实践运行中,或许会出现消费者收到Queue中的信息,但没有处置成功就宕机(或出现其余异常)的状况,这种状况下就或许会造成信息失落。为了防止这种状况出现,咱们可以要求消费者在消费完信息后发送一个回执给RabbitMQ,RabbitMQ收到信息回执(Messageacknowledgment)后才将该信息从Queue中移除;假设RabbitMQ没有收到回执并检测到消费者的RabbitMQ衔接断开,则RabbitMQ会将该信息发送给其余消费者(假设存在多个消费者)启动处置。这里不存在timeout概念,一个消费者处置信息期间再长也不会造成该信息被发送给其余消费者,除非它的RabbitMQ衔接断开。这里会发生另外一个疑问,假设咱们的开发人员在处置完业务逻辑后,遗记发送回执给RabbitMQ,这将会造成重大的bug——Queue中沉积的信息会越来越多;消费者重启后会重复消费这些信息偏重复口头业务逻辑…

另外pub message是没有ack的。

Message durability

假设咱们宿愿即使在RabbitMQ服务重启的状况下,也不会失落信息,咱们可以将Queue与Message都设置为可耐久化的(durable),这样可以保障绝大局部状况下咱们的RabbitMQ信息不会失落。但依然处置不了小概率失落事情的出现(比如RabbitMQ主机曾经接纳到消费者的信息,但还没来得及耐久化该信息时RabbitMQ主机就断电了),假设咱们须要对这种小概率事情也要治理起来,那么咱们要用到事务。由于这里仅为RabbitMQ的便捷引见,所以这里将不解说RabbitMQ关系的事务。

Prefetch count

前面咱们讲到假设有多个消费者同时订阅同一个Queue中的信息,Queue中的信息会被平摊给多个消费者。这时假设每个信息的处置期间不同,就有或许会造成某些消费者不时在忙,而另外一些消费者很快就处置完手头上班并不时闲暇的状况。咱们可以经过设置prefetchCount来限度Queue每次发送给每个消费者的信息数,比如咱们设置prefetchCount=1,则Queue每次给每个消费者发送一条信息;消费者处置完这条信息后Queue会再给该消费者发送一条信息。

在上一节咱们看到消费者将信息投递到Queue中,实践上这在RabbitMQ中这种事情永远都不会出现。实践的状况是,消费者将信息发送到Exchange(替换器,下图中的X),由Exchange将信息路由到一个或多个Queue中(或许摈弃)。

Exchange是依照什么逻辑将信息路由到Queue的?这个将在Binding一节引见。RabbitMQ中的Exchange有四种类型,不同的类型有着不同的路由战略,这将在Exchange Types一节引见。

routing key

消费者在将信息发送给Exchange的时刻,普通会指定一个routing key,来指定这个信息的路由规定,而这个routing key须要与Exchange Type及binding key联结经常使用能力最终失效。在Exchange Type与binding key固定的状况下(在反经常常使用时普通这些内容都是固定性能好的),咱们的消费者就可以在发送信息给Exchange时,经过指定routing key来选择信息流向哪里。RabbitMQ为routing key设定的长度限度为255 bytes。

RabbitMQ中经过Binding将Exchange与Queue关联起来,这样RabbitMQ就知道如何正确地将信息路由到指定的Queue了。

Binding key

在绑定(Binding)Exchange与Queue的同时,普通会指定一个bindingkey;消费者将信息发送给Exchange时,普通会指定一个routing key;当binding key与routingkey相婚配时,信息将会被路由到对应的Queue中。这个将在Exchange Types章节会罗列实践的例子加以说明。在绑定多个Queue到同一个Exchange的时刻,这些Binding准许经常使用相反的binding key。binding key 并不是在一切状况下都失效,它依赖于Exchange Type,比如fanout类型的Exchange就会忽视binding key,而是将信息路由到一切绑定到该Exchange的Queue。

Exchange Types

RabbitMQ罕用的Exchange Type有fanout、direct、topic、headers这四种(AMQP规范里还提到两种Exchange Type,区分为system与自定义,这里不予以形容),上方区分启动引见。

fanout类型的Exchange路由规定十分便捷,它会把一切发送到该Exchange的信息路由到一切与它绑定的Queue中。

上图中,消费者(P)发送到Exchange(X)的一切信息都会路由到图中的两个Queue,并最终被两个消费者(C1与C2)消费。

direct类型的Exchange路由规定也很便捷,它会把信息路由到那些binding key与routing key齐全婚配的Queue中。

以上图的性能为例,咱们以routingKey=”error”发送信息到Exchange,则信息会路由到Queue1(amqp.gen-S9b…,这是由RabbitMQ智能生成的Queue称号)和Queue2(amqp.gen-Agl…);假设咱们以routingKey=”info”或routingKey=”warning”来发送信息,则信息只会路由到Queue2。假设咱们以其余routingKey发送信息,则信息不会路由到这两个Queue中。

前面讲到direct类型的Exchange路由规定是齐全婚配binding key与routingkey,但这种严厉的婚配方式在很多状况下不能满足实践业务需求。topic类型的Exchange在婚配规定上启动了裁减,它与direct类型的Exchage相似,也是将信息路由到bindingkey与routing key相婚配的Queue中,但这里的婚配规定有些不同,它商定:

以上图中的性能为例,routingKey=”quick.orange.rabbit”的信息会同时路由到Q1与Q2,routingKey=”lazy.orange.fox”的信息会路由到Q1与Q2,routingKey=”lazy.brown.fox”的信息会路由到Q2,routingKey=”lazy.pink.rabbit”的信息会路由到Q2(只会投递给Q2一次性,只管这个routingKey与Q2的两个bindingKey都婚配);routingKey=”quick.brown.fox”、routingKey=”orange”、routingKey=”quick.orange.male.rabbit”的信息将会被摈弃,由于它们没有婚配任何bindingKey。

headers类型的Exchange不依赖于routing key与binding key的婚配规定去路由信息,而是依据发送的信息内容中的headers属性启动婚配。在绑定Queue与Exchange时指定一组键值对;当信息发送到Exchange时,RabbitMQ会取到该信息的headers(也是一个键值对的方式),对比其中的键值对能否齐全婚配Queue与Exchange绑定时指定的键值对;假设齐全婚配则信息会路由到该Queue,否则不会路由到该Queue。该类型的Exchange没有用到过(不过也应该很有用武之地),所以不做引见。

MQ自身是基于异步的信息处置,前面的示例中一切的消费者(P)将信息发送到RabbitMQ后不会知道消费者(C)处置成功或许失败(甚至连有没有消费者来处置这条信息都不知道)。但实践的运行场景中,咱们很或许须要一些同步处置,须要同步期待服务端将我的信息处置成功后再启动下一步处置。这相当于RPC(Remote Procedure Call,远程环节调用)。在RabbitMQ中也支持RPC。

中成功的机制是:

总结

本文引见了中团体以为最关键的概念,充沛应用提供的这些性能就可以处置咱们绝大局部的异步业务了。

RabbitMQ 选型和对比

1.从社区生动度

依照目前网络上的资料,、、三者中,综合来看,是首选。

不支持,和都支持。耐久化信息关键是指咱们机器在无法抗力要素等状况下挂掉了,信息不会失落的机制。

3.综合技术成功


牢靠性、灵敏的路由、集群、事务、高可用的队列、信息排序、疑问追踪、可视化治理工具、插件系统等等。


/最好,次之,最差。当然也可以做到,不过自己必定手动写代码成功,代码量不小。尤其是牢靠性中的:耐久性、投递确认、颁布者证明和高可用性。


无须置疑,最高,要素是它的成功言语是天生具有高并发高可用的言语。


比成熟,在可用性上,稳固性上,牢靠性上,胜于(实践上)。


另外,的定位关键在日志等方面,由于设计的初衷就是处置日志的,可以看做是一个日志(信息)系对抗个关键组件,针对性很强,所以假设业务方面还是倡导选用。


还有就是,的性能(吞吐量、)比要高出来很多。

假设咱们系统中曾经有选用,或许

,并且齐全可以满足如今的业务,倡导就不用重复去参与和造轮子。


可以在和当选用一个适宜自己团队和业务的,这个才是最关键的。然而无须置疑现阶段,综合思考没有第三选用。


假设本文对你有协助,那么请你资助我,让我更有热情的写下去,协助更多的人。

本站内容来源于网络,如不慎侵犯了您的权益,请联系我们将迅速删除。

(0)
上一篇 2024年9月14日 下午12:20
下一篇 2024年9月14日 下午12:20

相关推荐

  • 盘符失落怎样办 (盘符找不到了怎么办)

    问,我将电脑借给好友经常使用几天,不知道他做了什么操作,如今我关上,我的电脑,,外面空荡荡的,下面的A盘、C盘、D盘等所有盘符都没有了,我曾在,控制面板→治理工具→计算机治理→磁盘治理,里检查过了,盘符还在,请问盘符失落怎样办呢,答,在,我的电脑,中看不到盘符是由于在注册表HKEY,CURRENT,USER\Software\Micr…。

    2024年10月3日
    7800
  • 醋泡鸡蛋的效用 (醋泡鸡蛋的效果功效)

    醋泡鸡蛋对肥壮的影响醋泡鸡蛋,是我国的民间养生方法,它可调整与补偿人体营养状况,改善和提高新陈代谢水平,增强体质,提高抗病、免疫…醋泡鸡蛋醋泡鸡蛋对肥壮的影响目录醋泡鸡蛋对肥壮的影响点击图片进入下一页&gt,&gt,鸡蛋是高蛋白的食品,而醋是酸性饮品,醋蛋联合会不会对肥壮发生影响呢?咱们在应用醋泡鸡蛋养生治病美容的同时须要留意什么…。

    2024年10月10日
    7500
  • 物业法规 (物业法规定空置房交70%物业费)

    物业法律法规为物业治理提供了可行性,有效性,也为业主保养自己的权益提供了保证,…目录最新物业法2009年最新物业法第一章总则第一条为了规范物业治理活动,保养业主、物业经常使用人、物业服务企业、其余治理人的非法权益,改坏蛋民大众的寓居和上班环境,促成谐和社区树立,依据,中华人民共和国物权法,和,物业治理条例,等法律、行政法规,联合本…。

    2024年10月10日
    8100
  • 最新跆拳道较量致辞7篇

    致谢词提出本次会展优惠的关键义务,说明主题和意义,怎么写加入较量优惠致谢词?上方小编给大家带来加入较量优惠致谢词7篇,仅供参考,宿愿大家喜欢,加入较量优惠致谢词篇1各位指导、教员、裁判员、静止员,在这菊花烂漫、红叶满山的初夏节令,咱们迎来了,乡第二十届小在校生田径静止会的浩荡召开,首先,我代表大会组委会,对在静止会准备环节中付出辛怠…。

    2024年9月14日
    10000
  • 社保卡绑定微信后怎样查问余额

    昨儿有好友问,V绑定社保卡怎样查问余额?哈哈,这真是个好疑问,毕竟,V绑定社保卡很大的一个好处之一就是可以随时检查社保卡账号上的余额,接上去,咱们就一同追随小编来了解查问形式吧,互联网,时代,大家生存越来越便利,特意是支付宝、V的市区服务越来越完善,近日,V上线新版电子社保卡,查问、缴费、看病都不是疑问,来看看V怎样查社保卡余额吧,一…。

    2024年9月14日
    9200
  • 自检无法找到硬盘缺点一例 (无法找到v120_xp的生成工具)

    笔者有两块硬盘,旧的是IBM硬盘,新的是迈拓硬盘,一天笔者关上电脑,发现系统自检时无法经过,并且听到机箱内有,啪啪,的响声,而且硬盘灯狂亮不止,重启用软盘疏导,发现曾经无法识别硬盘,由于前两天刚新装了一块迈拓硬盘,所以疑心是这块新硬盘有疑问,于是重启BIOS进入检查,发现两块硬盘都没有被识别出,延续检测几次后终于可以正确识别了,保留消…。

    2024年10月3日
    8200
  • 超级淋病病毒常识 (超级淋病病毒是什么)

    艾滋病或许大家都分明,而超级淋病病毒比艾滋病危害还要大,那么超级淋病病毒是什么呢,…目录超级淋病病毒是什么超级淋病菌株也称,H041,,是一种新型的由基因突变或许人犬泛交形成质粒替换而成的淋病双球菌,该细菌对所有目前,截至2013年,运行的抗生素发生抗药性,超级淋病病毒是淋病病毒的最新变种,2013年5月在日本发现,瑞典和日本的钻…。

    2024年10月10日
    8800
  • 太阳诱电小型高效率元器件打算专区

    太阳诱电自1950年创立以来,始终开发着合乎时代需求的电子元器件并将其量产化,谢环球各地的公司网点里,约22,000人的员工经过不懈努力来满足始终参与的环球需求,太阳诱电从事着电容器、电感器、射频元器件、储能元件等产品阵容的钻研、开发、消费及供应,在IT及电子畛域中,以自动手机、电脑、电视为首的各种电子设备中都搭载了太阳诱电的产品,…。

    2024年9月14日
    11800
  • 2022冗长的儿童节文案 230句

    盼星星,盼月亮,终于把,六一,给盼来了,是孩子们的节日,六一儿童节之际,写什么样的文案比拟好呢?上方是小编给大家带来的冗长的儿童节文案,230句,,以供大家参考,冗长的儿童节文案1、奶茶是大孩子喝的,当天的我得喝旺仔牛奶,2、原谅我盛装缺席,手握水笔,眉头紧锁,奋笔疾书,只为帮学霸垫底,3、,六,一点童心,快乐无量无尽,4、吃了成功果…。

    2024年9月14日
    9300
  • bios设置图解教程 (bios设置硬盘启动顺序)

    BIOS设置程序是贮存在BIOS芯片中的,只要在开机时才可以启动设置,CMOS重要用于存储BIOS设置程序所设置的参数与数据,而BIOS设置程序重要对技巧的基本输入输入系统启动治理和设置,是系统运转在最好形态下,经常使用BIOS设置程序还可以扫除系统缺点或许诊断系统疑问,本文是电脑知识网WWW.SQ120.COM介绍文章,在咱们计算…。

    2024年10月3日
    10600

发表回复

登录后才能评论