首页 > 其他分享 >【RabbitMQ】【消息队列】基础知识整理

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

时间:2024-03-30 14:29:05浏览次数:20  
标签:场景 队列 RabbitMQ 基础知识 处理 消息 Kafka

在什么场景下使用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

标签:场景,队列,RabbitMQ,基础知识,处理,消息,Kafka
From: https://blog.csdn.net/m0_37828130/article/details/137171909

相关文章

  • 要想成为黑客,离不开这十大基础知识
    黑客就像计算机幽灵一样,来无影去无踪。很多朋友对他们的高超技术羡慕不已,都想知道成为一名黑客,都需要掌握哪些基本技能。其实,总结起来也就以下十项基础技能。1、专业英语计算机最早诞生于美国,天生自带“英文”属性。虽然我们普通人可以使用简体中文,但人和计算机的交互命......
  • 消息队列,缓存,分库分表是高并发解决方案
    消息队列的七种经典应用场景 在笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。在职业生涯中,笔者曾经使用过ActiveMQ、RabbitMQ、Kafka、RocketMQ这些知名的消息队列。这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。1异步&解耦笔......
  • 云计算第1阶段_Linxu基础知识_day5
    yum补充#yum补充rpm-qa|grepvim#列出服务器已经安装过的包​#如果不合适,查看firewalld和SELinux开关状态getenforce#查看SELinux状态setenfotce0vim/etc/selinux/configSELINUX==>no​#查看防火墙状态systemctlstatusfirewalld#永久关闭防火墙systemct......
  • 云计算第1阶段_Linxu基础知识_day4
     1查看文件内容#1查看文件所有内容cat$path/$file.txt-n #显示行号-A #显示控制字符(空格、制表符),用于查看文件内容最后是否多出一些看不到的信息#2headhead$path/$file.txt #查看文件内容前10行head-n100$path/$file.txt #显示文件前100行内容#3tailtail......
  • 双端队列Deque——ArrayDeque的实现
    Deque接口表示一个双端队列(DoubleEndedQueue),允许在队列的首尾两端操作,所以既能实现队列行为,也能实现栈行为。Deque常用的两种实现ArrayDeque和LinkedList,这篇主要介绍下Deque的常用操作,并重点看下ArrayDeque的实现逻辑。1、接口API1.1、Queue接口Queue的API......
  • rabbitmq
    消息安全之durable持久化#queue持久化#消息持久化sendimportpika#1拿到链接credentials=pika.PlainCredentials("admin","admin")connection=pika.BlockingConnection(pika.ConnectionParameters(host='10.0.0.111',port=5672,credentials=......
  • qml基础知识
    qml入门培训笔记QtQuick简介QtQuick是QtSDK4.7中引入的一种新的界面开发框架,用于创建供移动和嵌入式设备使用的动态触摸式界面和轻量级应用程序。它提供了一种高级用户界面技术,使得开发者能够轻松地为移动设备创建流畅的用户界面。QtQuick包括界面脚本语言QML、语言运行时、......
  • RabbitMQ的部分模式
    1发布订阅模式发送者packageorg.example;importcom.alibaba.fastjson.JSON;importcom.rabbitmq.client.BuiltinExchangeType;importcom.rabbitmq.client.Channel;importcom.rabbitmq.client.Connection;importcom.rabbitmq.client.ConnectionFactory;importjava......
  • c++基础知识
    deque的用法#include<deque>deque<type>d;//定义一个dequepush_back()//在队列的尾部插入元素。push_front()//在队列的头部插入元素。pop_back()//删除队列尾部的元素。pop_front()//删除队列头部的元素。back()//返回队列尾部元素的引用。front()//返回队列头部元素......
  • 10天【代码随想录算法训练营34期】 第五章 栈与队列part01(● 232.用栈实现队列 ● 22
    232.用栈实现队列classMyQueue:def__init__(self):self.queue=[]self.size=0defpush(self,x:int)->None:self.queue.append(x)self.size+=1defpop(self)->int:self.size-=1retur......