消息队列介绍

消息队列介绍


学前小思考:什么场景下会用到消息队列?

举例:修改商品

假如我们需要修改商品的价格,而微服务中有修改商品微服务和查询商品微服务,并且有各自独立的数据库。因此,修改商品价格步骤如下:

  1. 同步调用方式(耗时80ms)

在这里插入图片描述

其中序号为修改商品价格的步骤:(5ms、30ms为假设的耗费时间)

①为发起修改请求;

②为服务端响应修改;

③修改成功返回响应;

④修改了A表,要同步修改B表,因此通知查询微服务修改B表;

⑤查询微服务修改B表;

⑥修改成功返回响应;

⑦返回修改微服务的响应;

⑧返回浏览器,响应用户,修改成功;


  1. 异步调用方式(耗时45ms)
    在这里插入图片描述

同步调用:A服务调用B服务,需要等待B服务执行完毕的返回值,A服务才可以继续往下执行;

  • 同步调用可以通过REST和RCP完成

    • REST:ribbon、feign

    • RCP:dubbo

异步调用:A服务调用B服务,无需等待B服务的执行结果,也就是说在B服务执行的同时A服务可以继续往下执行;

  • 通过消息队列实现调用

一、消息队列

如上提到的异步调用,我们只需把调用查询微服务的消息存在消息队列中,不管查询微服务是正常状态或宕机状态,都可实现调用。

在这里插入图片描述

消息队列概念:MQ全称为Message Queue,消息队列是一种应用程序对应用程序的通信方式。应用程序通过读写出入队列的消息来进行通信,而不是通过直接调用批次来通信。

常见消息队列中间件:

RabbitMQ、ActiveMQ、RocketMQ、Kafka

在这里插入图片描述

  • RabbitMQ 稳定可靠,数据一致,支持多协议,有消息确认,基于erlang语言;
  • Kafka 高吞吐,高性能,快速持久化,无消息确认,无消息遗漏,可能会有重复消息,依赖于zookeeper,成本高;
  • ActiveMQ 不够灵活轻巧,对队列较多情况支持不好;
  • RocketMQ 性能好,高吞吐,高可用性,支持大规模分布式,协议支持单一(阿里的产品);

二、RabbitMQ基本介绍
  • RabbitMQ是一个在AMQP基础上完成的,可复用的企业消息系统。他遵循Mozilla Public License开源协议。
  • AMQP,即Advanced Message Queuing Protocol, 一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。
  • 主要特性:
    • 保证可靠性:使用一些机制来保证可靠性,如持久化、传输确认、发布确认
    • 灵活的路由功能
    • 可伸缩性:支持消息集群,多台RabbitMQ服务器可以组成一个集群
    • 高可用性:RabbitMQ集群中的某个节点出现问题时队列任然可用
    • 支持多种协议
    • 支持多语言客户端
    • 提供良好的管理界面
    • 提供跟踪机制:如果消息出现异常,可以通过跟踪机制分析异常原因
    • 提供插件机制:可通过插件进行多方面扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值