- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
你知道目前市面上使用的MQ有哪些吗?
RabbitMQ、ActiveMQ、RocketMQ、Kafaka。
你使用的是哪种MQ?为什么选择这类MQ?
我们选用的是RabbitMQ,它并发能力强,性能好,延时低,管理界面也很丰富,只是吞吐量较低,但对于不是特别依赖大数据的项目来说,选用RabbitMQ已经足够用了。
ActiveMQ中文社区不怎么活跃,也几乎不怎么更新了,所以不选用。
RocketMQ是阿里开源项目,吞吐量是最高的(10万次级),但免费版的MQ是阉割版的,容易出问题。
Kafka吞吐量很大(10万次级),但它不是真正的MQ,只是类似MQ的产品,它只支持主要MQ功能,比如它不具有消息确认机制。
什么是RabbitMQ?
RabbitMQ是一款开源的,Erlang编写的,基于AMQP协议的消息中间件。
什么是AMQP协议?
AMQP 一个提供统一消息服务的应用层标准高级消息队列的链接协议,RabbitMQ是主要根据AMQP协议进行数据通信和传输的。有点类似于HTTP协议。
AMPQ与JMS有什么区别知道吗?
JMS是定义了统一的接口(API),来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式。
JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
JMS规定了两种消息模式;而AMQP的消息模式更加丰富。
你使用的是SpringCloud,Feign可以进行远程调用,为什么还要中间加一个MQ呢?
为了解耦,如果没有中间件进行处理,那两个系统之间的关系过于紧密,一方改动,另一方也必须改动。
MQ有哪些优势?
应用解耦(核心):降低系统的耦合性,提升可维护性。
场景:服务调用之间都可以考虑MQ。
异步提速:提升用户体验和系统吞吐量。
场景:发送订单消息、发送短信消息等。
削峰填谷:减少高峰时期对服务器的压力。
场景:秒杀活动、限时定购等。
RabbitMQ有什么缺点?
1、系统可用性降低
本来系统运行好好的,现在你非要加入个消息队列进去,那消息队列挂了,你的系统不是呵呵了。因此,系统可用性会降低。
2、系统复杂度提高
加入了消息队列,要多考虑很多方面的问题,比如:一致性问题、如何保证消息不被重复消费、如何保证消息可靠性传输等。因此,需要考虑的东西更多,复杂性增大。
3、一致性问题
A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?你这数据就不一致了。
4、消息顺序问题
如果有A、B两个消息,B消息被消费者消费的前提是A消息已被执行,这时候就不能先执行B,得先执行A才行。
那怎么解决以上缺点呢?
系统可用性降低:集群模式保证高可用。
镜像集群模式:这种模式,才是所谓的 RabbitMQ 的高可用模式。跟普通集群模式不一样的是,在镜像集群模式下,你创建的 queue,无论元数据还是 queue 里的消息都会存在于多个实例上,就是说,每个 RabbitMQ 节点都有这个 queue 的一个完整镜像,包含 queue 的全部数据的意思。然后每次你写消息到 queue 的时候,都会自动把消息同步到多个实例的 queue 上。RabbitMQ 有很好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候是可以要求数据同步到所有节点的,也可以要求同步到指定数量的节点,再次创建 queue 的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。这样的话,好处在于,你任何一个机器宕机了,没事儿,其它机器(节点)还包含了这个 queue 的完整数据,别的 consumer 都可以到其它节点上去消费数据。坏处在于,第一,这个性能开销也太大了吧,消息需要同步到所有机器上,导致网络带宽压力和消耗很重!RabbitMQ 一个 queue 的数据都是放在一个节点里的,镜像集群下,也是每个节点都放这个 queue 的完整数据。
系统复杂度提高
加入Rabbit确实会增加系统复杂度,但MQ的解耦、提速、削峰这些方面的收益超过管理MQ的成本,所以该用还得用。
一致性问题
RabbitMQ分布式消息是最终一致性的,即使可能因为消息失败而导致前后消息不一致,但分布式系统是在不同服务器上的,不能像简单的本地回滚一样,所以它通过发送延迟消息和定时消息来定事进行消息补偿,最证最终消息是一致性的,即是一个完整的事务。
RabbitMQ本身是有事务的功能的,但是分布式的事务处理效率太低,且发生问题的可能性不高,所以多是选择放弃强一致性,而采用最终一致性。
消息顺序问题
在MQ中将有顺序要求的AB两个消息分别用两个队列与两个消费端手工ack接收,并且在消息上需要有对应的同组编号信息,以及发
文档评论(0)