赞
踩
1、解耦:如果多个模块或者系统中,互相调用很复杂,维护起来比较麻烦,但是这个调用
又不是同步调用,就可以运用 MQ 到这个业务中。
2、异步:这个很好理解,比如用户的操作日志的维护,可以不用同步处理,节约响应时间。
3、削峰:在高峰期的时候,系统每秒的请求量达到 5000,那么调用 MySQL 的请求也是5000,一般情况下 MySQL 的请求大概在 2000 左右,那么在高峰期的时候,数据库就被打垮了,那系统就不可用了。此时引入 MQ,在系统 A 前面加个 MQ,用户请求先到 MQ,系统 A 从 MQ 中每秒消费 2000 条数据,这样就把本来 5000 的请求变为 MySQL 可以接受的请求数量了,可以保证系统不挂掉,可以继续提供服务。MQ 里的数据可以慢慢的把它消费掉。
(1)降低了系统可用性 (2)增加了系统的复杂性
RabbitMQ 是比较有代表性的,因为是基于主从做高可用性的。以他为例,自行查阅以下模式。
rabbitmq 有三种模式:单机模式、普通集群模式、镜像集群模式。
在特殊场景下有其对应的好处,解耦、异步、削峰。
缺点有以下几个:
系统引入的外部依赖越多,越容易挂掉。万一 MQ 挂了,MQ 一挂,整套系统崩溃,你不就完了?
硬生生加个 MQ 进来,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?问题一大堆。
A 系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是 BCD 三个系统那里,BD 两个系统写库成功了,结果 C 系统写库失败了,咋整?你这数据就不一
致了。
对于吞吐量来说 kafka 和 RocketMQ 支撑高吞吐,ActiveMQ 和 RabbitMQ 比他们低一个数量级。对于延迟量来说 RabbitMQ 是最低的。
1.从社区活跃度
按照目前网络上的资料,RabbitMQ、activeM 、ZeroMQ 三者中,综合来看,RabbitMQ 是首选。
2.持久化消息比较
ActiveMq 和 RabbitMq 都支持。持久化消息主要是指我们机器在不可抗力因素等情况下挂掉了,消息不会丢失的机制。
3.综合技术实现
可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、
插件系统等等。
RabbitMq/Kafka 最好,ActiveMq 次之,ZeroMq 最差。当然 ZeroMq 也可以做到,不过自己必须手动写代码实现,代码量不小。尤其是可靠性中的:持久性、投递确认、发布者证实和高可用性。
4.高并发
毋庸置疑,RabbitMQ 最高,原因是它的实现语言是天生具备高并发高可用的 erlang 语言。
5.比较关注的比较,RabbitMQ 和 Kafka
RabbitMq 比 Kafka 成熟,在可用性上,稳定性上,可靠性上,RabbitMq 胜于 Kafka(理论上)。另外,Kafka 的定位主要在日志等方面, 因为 Kafka 设计的初衷就是处理日志的,可以看做是一个日志(消息)系统一个重要组件,针对性很强,所以 如果业务方面还是建议选择 RabbitMq 。
还有就是,Kafka 的性能(吞吐量、TPS)比 RabbitMq 要高出来很多。
设置队列属性,队列中所有消息都有相同的过期时间
对消息本身进行单独设置,每条消息的 TTL 可以不同
如果两种方法一起使用,则消息的 TTL 以两者之间较小的那个数值为准
RabbitMQ 的持久化分为:交换器的持久化、队列的持久化和消息的持久化
交换器和队列的持久化都是通过在声明时将 durable 参数置为 true 实现的
消息的持久化是在发送消息指定 deliveryMode 为 2 实现的
答:Broker: 简单来说就是消息队列服务器实体
Exchange: 消息交换机,它指定消息按什么规则,路由到哪个队列
Queue: 消息队列载体,每个消息都会被投入到一个或多个队列
Binding: 绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key: 路由关键字,exchange根据这个关键字进行消息投递
Producer: 消息生产者,就是投递消息的程序
Consumer: 消息消费者,就是接受消息的程序
Channel: 消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务 由Exchange、Queue、RoutingKey三个才能决定一个从Exchange到Queue的唯一的线路
答:拆分多个 queue,每个 queue 一个 consumer,就是多一些 queue 而已,确实是麻烦点;或者就一个 queue 但是对应一个 consumer,然后这个 consumer 内部用内存队列做排队,然后分发给底层不同的 worker 来处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。