【RabbitMQ】【消息队列】基础知识整理

在什么场景下使用RabbitMQ?

开源消息队列中间件,它提供了可靠的消息传递机制,可以在分布式中进行异步通信。常见场景:

  1. 异步任务处理:处理耗时任务时,可使用MQ来实现异步任务处理。

         常见场景举例:新用户注册后,需要发注册邮件和注册短信,传统的做法有两种 1.串行的方式 2.并行的方式

异步处理:在注册成功持久化后,即可返回给客户。可以提高性能,减少不必要的等待;

        2 .解藕系统组件:

常见场景举例:双11,618 是购物狂节,用户下单后,订单系统需要通知库存系统,传统的做法就是订单系统调用库存系统的接口扣减库存,

通过消息,不强依赖于库存系统;订单下完单持久化之后就返回客户;提升效率;

        3. 广播和订阅:实时通知,日志收集,广播事件等

常见场景举例:订单完成后,订单数据结果需要下发下各个系统:比如大数据系统;比如财务系统;比如履约系统等等,这时只需要通过广播事件,消费者系统进行订阅消费即可 实时获得。

任务队列:处理大量的任务时,可以使用mq来作为任务队列。生产者将任务放入消息中,消费者获取任务并进行处理。这样可以实现负载均衡和优先级控制。确保任务的执行处理。

高性能、可扩展、可靠的通信等特点;

        4. 流量削峰:

常见场景举例: 秒杀活动,一般会因为流量过大,导致应用挂掉,为了解决这个问题,一般在应用前端加入消息队列。

1.用户的请求,服务器收到之后,首先写入消息队列,加入消息队列长度超过最大值,则直接抛弃用户请求或跳转到错误页面.(当然可以通过各种限流策略 达到目的)

2.秒杀业务根据消息队列中的请求信息,再做后续处理.

RabbitMQ与Kafka的区别:都用于分布式系统中的异步通信的消息中间件。

  1. 消息模型:

    RabbitMQ使用AMQP作为消息传递协议,它支持队列模型。消息由生产者发送到队列中,然后由消费者从队列中获取并处理;

    Kafka:使用发布/订阅模型,消息被发布到topic中,然后由订阅者消费。适用于流式处理、日志收集和实时数据管道等场景;

  2. 可伸缩性:

    RabbitMQ基于Erlang虚拟机的可靠性消息传递机制,适合处理大量的短暂消息。支持多个队列和消费者,并可以通过集群来扩展吞吐量和可靠性

    Kafka使用分布式日志存储和分区的方式来实现高吞吐量和可伸缩性。它可以将消息分布到多个分区中,支持水平扩展和并行处理。

  3. 持久性:

    RabbitMQ默认将消息持久话到磁盘上,以确保消息不会丢失。还可支持消息确认机制,确保消息成功处理

    Kafka将消息持久化到磁盘上,并使用复制机制来实现高可用性和数据冗余。它使用来批量写入和零拷贝技术,以提高磁盘写入性能。

  4. 数据保留:

    RabbitMQ不会保留已经传递的消息,一旦消息被消费,就会从队列中删除

    Kafka可以根据配置保留信息的时间和大小。它可以持久话大量的消息,并支持按照时间或偏移量进行消息检索

  5. 应用场景:

    RabbitMQ适用于任务队列、事件驱动架构、解藕系统组件等场景,特别适合可靠性和灵活性的应用。

    kafka适用于流式处理、日志收集、实时数据管道等场景,特别适合处理大规模的实时数据流。

RabbitMQ和Kafka不同,根据需求场景选择使用。维度:消息模型,吞吐量,可靠性和数据保留等方面

RabbitMQ 中的相关概念:

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

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等

Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销 Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)

Queue:消息最终被送到这里等待 consumer 取走

Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含routing key。Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

网上截图:

RabbitMQ的安装

1. 安装依赖环境

在线安装依赖环境:yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

2. 安装Erlang

上传:erlang-18.3-1.el7.centos.x86_64.rpm;socat-1.7.3.2-5.el7.lux.x86_64.rpm ;rabbitmq-server-3.6.5-1.noarch.rpm

安装: rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm

相关推荐

  1. SpringCloud-实现基于RabbitMQ消息队列

    2024-04-02 09:48:04       10 阅读

最近更新

  1. ES6

    2024-04-02 09:48:04       0 阅读
  2. 安装包逆向(总结)

    2024-04-02 09:48:04       0 阅读
  3. jsonfield注解不生效

    2024-04-02 09:48:04       0 阅读
  4. Opencv | 图像几何变换

    2024-04-02 09:48:04       0 阅读
  5. 子集运算应用举例

    2024-04-02 09:48:04       0 阅读

热门阅读

  1. vue2 预览word文件

    2024-04-02 09:48:04       6 阅读
  2. C++宝强越狱1.0.6版本

    2024-04-02 09:48:04       5 阅读
  3. python 批量向MQTT服务器推送数据

    2024-04-02 09:48:04       5 阅读
  4. FastAPI Web框架教程 第13章 WebSocket

    2024-04-02 09:48:04       4 阅读
  5. 设计模式-单例模式(懒汉式)

    2024-04-02 09:48:04       6 阅读
  6. Anaconda conda常用命令

    2024-04-02 09:48:04       9 阅读