mq是什么就是消息队列,也称为消息中间件,遵循fifo原则。
小项目不适合mq,对数据一致性有要求的场景不适合mq。
比如几十万数据,直接放到消息队列,搞个消费者慢慢一条条处理(消峰了?)
Rabbitmq和Rocketmq区别(面试)
Rabbitmq社区要活跃些,Rocketmq要低些
Rocket支持百万级,Rabbitmq是万级。
最重要,Rocketmq协议不标准(我感觉这一句话就够了,剩下的随便扯点,都感觉像是对的。)
kafka一般是大数据领域,elk日志收集,实时性要求高
redis如何消息队列,先进先出,用list数据类型,用发布订阅那个模式
技术选项建议:
业务场景简单,快速上线,redis
大数据场景:日志收集,实时性要求高
金融领域:不能接受消息丢失或重复,推荐rabbitmq和rokktmq
mq的协议(没啥用,没人问)
AMOP-rabbitmq
roketmq原理
要先搞清楚有哪些角色
nameserver:有点类似于微服务的注册中心,管理broker信息(类似于通讯录,看有哪些broker)
broker集群:多个节点,broker里面放topic和队列,找的话根据topic来找队列。topic名字可以一样,在两个节点存储。层级反正就是boker下有topic,topic下就是队列。broker可以主从集群,防止单点故障
broker反正就是集群的存在,还有主从集群,可以从主获取,也可以从从获取。brokerid=0就是主,brokerid=1就是从,说实话,叫我面试说这么详细是说不出来,后面有公式化答案。
简而言之:就是broker要和nameserver建立长连接,定时注册topic到nameserver(注册topic到那么server)
难道每个broker都有主备,这我也不是很清楚。
生产者:组的存在,多个生产者组集群。生产者和nameserver建立长连接,1.生产者指定topic名称,首先获取topic在哪些broker上。2.根据一定规则,从topic下的多个队列中选择其中一个队列来接受消息。3 拿到该队列所在broker节点信息。4.根据broker信息连接broker,将信息发送给指定队列。(我在想能不能一句话概括这么多的废话,我觉得是这样的,生产者根据topic名,获取broker中topic地址信息,然后发送消息到topic中,再然后把消息发给队列中,当然队列是多个的,要根据某种规则分配。)
消费者:1 和nameserver建立长连接。 2.根据topic获取broker信息 3监听这些节点上,对应topic的队列。(我觉得也是一句话,根据topic去broker找topic,监听topic下的队列获取信息)
消费者获取消息的方式:推送式,拉取式
原理的话:
启动nameserver,监听broker集群,生产者,消费者,等待他们连接。
启动broker:和nameserver建立长连接,发送心跳包,里面有它各个broker下的信息。
创建topic,创建topic,创建Topic时需要指定该Topic要存储在哪些Broker上
生产者生产:生产的时候根据topic,把消息发送到它的队列下面。(只是说出了主要,建立连接,获取信息,根据规则发到哪个队列)
消费者:消费的时候,根据topic找到topic下的队列,然后消费(说出了主要的,建立连接,获取信息,监听topic下队列。)