• 一、Rabbit的介绍与安装


    MQ概述

    MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信。

    传统的分布式系统有两种通信方式:

    1. 以HTTP为代表的REST,操作简单但是缺点很明显,就是没有长连接。
    2. 使用RPC通信,缺点是操作一般是同步的,而且各个模块之间的耦合度比较高。

    消息队列也可以作为一种第三方工具介入分布式系统之间的通信。

    MQ的优势和劣势

    MQ的优势主要有三种:

    1. 应用解耦:使用 MQ 使得应用间解耦,提升容错性和可维护性。
    2. 异步提速:可以提升用户体验和系统吞吐量(单位时间内处理请求的数目)。
    3. 削峰填谷:提高系统稳定性。比如系统的请求量突然暴增,我们可以使用MQ来接收暴增的消息,然后一部分一部分的发送给系统,降低系统的压力。

    MQ的劣势主要也有三种:
    4. 系统可用性降低:系统引入的外部依赖越多,系统稳定性越差。一旦 MQ 宕机,就会对业务造成影响。
    5. 系统复杂度提高:MQ 的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过 MQ 进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?
    6. 一致性问题:A 系统处理完业务,通过 MQ 给B、C、D三个系统发消息数据,如果 B 系统、C 系统处理成功,D 系统处理失败。如何保证消息数据处理的一致性?

    RabbitMQ介绍

    RabbitMQ是消息队列的一种,采用Erlang语言开发,下面是Rabbit的基础架构图:

    在这里插入图片描述

    RabbitMQ相关概念介绍

    Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker。

    Connection:连接,应用服务与Server的连接。

    Channel:信道,客户端可建立多个Channel,每个Channel代表一个会话任务。

    Message:消息,由MessagePropertiesbody构成,MessageProperties可对消息的优先级、过期时间等参数进行设置,其中参数correlation_id一般作为消息主键。

    Exchange:交换机,用于转发消息,消息将根据routeKey被交换机转发给对应的绑定队列。

    Queue:队列,消息最终被送到这里等待消费者取走,参数中的Auto-delete意为当前队列的最后一个消息被取出后是否自动删除。

    Binding:绑定exchange和queue之间的虚拟连接,二者通过routingkey进行绑定。

    Routingkey:路由规则,交换机可以用它来确定消息被路由到哪里。

    Virtual host:类似于网络中的 namespace 概念,用于进行逻辑隔离,一个虚拟主机中可以有多个Exchange和Queue,同一个虚拟主机中不能有名称一样的Exchange和Queue。

    RabbitMQ的安装

    RabbitMQ最简单的一种安装方式就是将它安装在Docker中:

    首先创建一个目录用于与容器中的rabbitmq配置文件形成映射:

    mkdir /opt/module/rabbitmq/data -p
    
    • 1

    接着在docker中运行rabbitmq镜像:

    # 5672是rabbitmq 默认TCP监听端口,到时候程序连接的也是这个端口
    # 15672是rabbitmq提供的ui管理界面的端口
    # 25672是rabbitmq集群之间通信的端口
    # 如果docker跑在云服务器上,记得在安全组中开放5672和15672端口
    docker run -d --hostname rabbit-svr --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /opt/module/rabbitmq/data:/var/lib/rabbitmq rabbitmq:management
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后就可以在浏览器中访问rabbitmq的ui控制界面了,默认账号和密码都是guest

    在这里插入图片描述
    我们可以在控制台中创建相应的exchange、queue等等操作:

    在这里插入图片描述

  • 相关阅读:
    详解 Flink Table API 和 Flink SQL 之时间特性
    Spring MVC @Controller和@RequestMapping注解
    [VNCTF2022]easyj4va
    file 文件与 base64 互相转化
    【word密码】如何给word文件设置带有密码的只读方式?
    接口参数校验、默认值
    科普一下:抖音视频不能保存本地是怎么回事?
    海量数据处理
    如何快速解决d3dcompiler_43.dll缺失问题?五种方法快速解决
    写给Python社群的第4课:字典和集合,又是一组新概念
  • 原文地址:https://blog.csdn.net/qq_49723651/article/details/127705345