RabbitMQ(1)——MQ概述

什么是MQ

MQ(message queue),本质上是一个队列,FIFO先进先出。可以将消息在不同进程之间传递。

为什么要用MQ

流量消峰   就是假如一个系统只能处理一万次订单,当超过这个限制就会产生问题。使用消息队列,可以让所有的请求都放在mq的消息队列中,然后系统从mq中接收请求处理。这样就能将一秒内的请求分成多秒来处理。好处就是总比系统承受不住无法访问的好,坏处就是延时增长。
应用解耦   很简单,之前没用mq的时候,各个微服务直接就是互相调用,即便有熔断降级,但是一旦调用链上有一个微服务挂了,返回的都不是想要的结果。有了mq后,各微服务都是和mq进行通信,即使中间有一个微服务挂了,只要能在一定时间内修复,在挂的这一段时间其他微服务还是能提供服务给用户。
异步处理   有一些服务之间的调用采用的异步的方式,也就是调用其他服务,不需要阻塞等待服务返回结果。一般采用轮询或者提供一个回调api的方式来处理。但是轮询消耗资源,提供一个回调api又要增加代码量。使用mq,异步的结果可以通过mq来得知/

MQ分类

ActiveMQ   有点是单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用性。
  缺点是官方社区对ActiveMQ5.x维护越来越少,高吞吐量场景较少使用,
Kafka   大数据的杀手锏。优点是性能卓越,单机写入TPS约在百万条/秒,吞吐量高。时效性ms级可用性非常高。kafka是分布式的,一个数据多个副本,少数机器宕机不会丢失数据。在大数据领域实时计算以及日志采集被大规模使用。
  缺点是kafaka单机超过64个队列/分区,Load会发生明显飙高现象,队列越多,load越高。发送消息响应时间变长,使用短轮询方式,实时性取决于轮询间隔时间;消息失败不支持重试;支持消息顺序,但是一台代理宕机后,就会产生消息乱序,社区更新较慢;
RocketMQ   RocketMQ出自阿里巴巴,用java语言实现。在阿里广泛应用在订单、交易、充值、流计算、消息推送、日志流处理、binglog分发等。
  优点是单机吞吐量十万级,可用性非常高。消息可以做到0丢失。采用分布式,扩展性好,支持10亿级别的消息堆积,而且不会因为堆积导致性能下降。源码是java编写,便于开发者阅读和拓展。
  缺点是支持的客户端语言不多,目前是java和c++,其中c++不成熟。社区活跃度一般。没有在MQ核心中去实现JMS等接口,有些系统要迁移需要修改大量代码。
  选择场景:对于可靠性要求很高的场景,尤其是扣款等业务。还有服务需要削峰。这些高并发又要高稳定的场景下。
RabbitMQ   2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,目前最主流的消息中间件之一。
  优点是由于erlang语言的高并发特性,性能较好。吞吐量到万级,MQ功能比较完备,稳定,易用,跨平台,支持多种语言。社区活跃度高。
  缺点是商业版需要收费
  选择场景:性能好时效性微妙级。如果数据量没有特别大,中小型公司优先选择功能比较完备的RabbitMQ

RabbitMQ概述

  RabbitMQ是一个消息中间件,它有四大核心概念,分别为生产者、交换机、队列和消费者。
  RabbitMQ有六大核心模式,分别为简单模式、工作模式、发布订阅模式、路由模式、主题模式、发布确认模式。