rabbitMq 入门及面试大全

1, 什么是mq 

a:  mq 就是消息队列, 是基础数据结构的 ”先进先出“ 的一种数据结构, 

 一般用来解决 , 解耦、异步消息、 流量削峰,等问题,高可用、可伸缩和最终一致性架构。

     1, 解耦 : 一个业务需要多个模块共同实现,或者一条消息有读个系统对应处理,只需要在住业务完成以后,发送一条mq, 其余模块消费mq 消息,即可实现业务,降低模块之间的耦合

异步: 主要业务执行结束后,从属业务通过mq 异步处理, 减少业务的响应时间,提高用户体验。

削峰: 高并发下,业务异步处理,提供高峰期业务处理额能力,避免瘫痪。

(这也是mq 三个特性)

2, mq 是怎么实现消息传递的?

a: 生产者产生消息并把输出的数据放在队列中,用队列机制来实现消息传递,消费者可以把指定的队列拉去消息,或者订阅队列,或者mq 服务端推送消费者。

3 ,为什么要用mq ? 

 a: 这个问题很关键,面试关的意图就是想知道,你真实项目中,是否用到了mq ,举出业务场景,解决了什么问题,不用这种mq 会有什么麻烦,类似常用的场景还有哪些?

 我举个例子,我们有个业务用到阿里的隐私号服务,隐私号电话接通挂断以后会生产电话记录录音文件等信息,阿里提供里回调地址和订阅两种方式,我们收到推送电话记录但是,其中有一个录音文件地址,收到后并未生成(其实这应该阿里的一个bug )但是我们接到推送了会做一系列业务操作和入库处理,由于没有第一时间收到录音文件,我们使用了mq 先通话记录的callid 和 地址放到mq 中10分钟, 

AMQ_SCHEDULED_DELAY 这里用力activemq 的 属性,broker 会延迟设定时间投递,

消费者消费时候如果还未生产文件,则延时20分钟投递,... 这里就利用到了mq 的异步,和解耦。   

削峰:  假设双十一,秒杀这种场景,到某个时候,瞬间数据库,访问量上来,mysql数据库的访问效率是 2k/s 个, 现在来了五万个 直接崩溃,这里直接使用mq  将访问消息放到队列中, mysql 每次取2k/s 消费, 。。。 就可以避免击穿, 但是当mq 中消息堆积了也不行,可以考虑分布式,多节点处理。

mq 的四大消费问题 ?  消息不丢失, 消息积压, 消费顺序性

rabbitMq ,

  1,生存之把消息发送打mq serve 的过程丢失

从生产者发送消息的角度,提供了一个confirm 消息确认机制,生产者发送消息到server 以后,如果消息处理成功, server端会返回一个ack 消息,客户端可以根据消息的处理结果决定是否要做消息的重新发送,从而确保消息一定到达rabbit server 上。

2,rabbitmq server 收到消息后在持久化之前宕机,数据未到达队列导致数据丢失

    在发布消息时候,可以设置消息持久化属性,使其在rabbit mq 服务器宕机后仍然保存在磁盘上,这样即时服务宕机消息仍会保存看病冲洗服务后回复,使用事务来确保消息的持久化和发送的原子性,开启事务后,mq 会等待消息完全写入磁盘才确认发布成功

3, 队列中的数据还未被消费就宕机,独立的数据消息丢失

    创建丢列有属性可以设置持久化,这样在mq 宕机时,未消费的消息也会将被持久化到磁盘,回复到队列中。

4, 消费端收到消息还没来及处理宕机,导致mq serve 认为这个消息已经签收

把消息的自动确认机制改成手动,也就是消费端只有手动调用消息确认方法才表示消息已经签收。

Mq 百万消息持续积压

     消息积压的原因生产者的消息生产速度大于消费者速度,遇到这个问题的时候,需要排查具体的原因再提出解决问题方案。

1, 流量变大,

   采用异步处理,或者时采用懒性队列扩大交换机和消费者之间的消息积压空间,正常队列把消息放到内存中,可利用空间较小,惰性队列接收到消息后直接存入到磁盘,。

2,消费者崩了, 消息堆积不消费

  重启服务

rabbit mq 消息重复消费问题

 消息去重: 在消费者端,接收到的消息进行去重操作,可以通过维护一个消息id 的集合,或者使用为唯一表示查数据库,来判断小是否消费,消费类不重复消费,

 消息取机制,可以确保消息正常消费,消费玩,手动向mq发送消息,告知mq 该消息已经消费成功,mq 会将消息标记已确认,然后删除消息队列消息。

rabbit mq 消息的消费顺序问题

 业务中可能会存在读个消息需要顺序处理的情况, 比如生成订单和扣库存,一定是先生成订单后扣库存,但是我们都是集群部署, 一个队列就会有多个消费者,?

      本身并不能直接保证消息的消费顺序,因为其基于amqp 协议, 它使用多个消费者在多个线程上并行消费,但是可以采取一下方式:

1, 单消费者对单队列, 可以给rabbtimq 创建多个 队列, 每个消费者只消费一个队列,这样同一个订单号的消息就只会被同一个消费者顺序消费。

2,使用多个队列和分区: 可以将相同类型的消息发送到多个队列,并使用分区建 routingKey 决定消息要发送到那个队列,然后在

消费者端,针对每个队列都是用单个消费者来保证消息的消费顺序。

3,在消费者内部排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/639206.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 生成 图片网页列表 显示路径和建立时间 笔记

Python 一键 生成 图片网页列表 显示路径和建立时间 (方便查看复制路径、重复一键生成) 支持格式:jpg \png\ svg\ webp 图片网页列表 图示: 参考代码: # -*- coding: utf-8 -*- import os import datetime# 指定图片…

【Linux对磁盘进行清理、重建、配置文件系统和挂载,进行系统存储管理调整存储结构】

Linux 调整存储结构 前言一、查看磁盘和分区列表二、创建 ext4 文件系统,即:格式化分区为ext4文件系统。1.使用命令 mkfs.ext4 (make file system)报错如下:解决办法1:(经测试,不采用)X解决办法…

浅谈大数据智能化技术在多个领域的应用实践

摘要 大数据智能化技术在当今信息社会中得到了广泛的应用。从金融、互联网电商、视频行业到垂直短视频领域,从工业互联网到云计算、边缘计算等领域,大数据智能化技术已经成为了企业竞争力的重要组成部分。技术实践、架构设计、指标体系、数据质量、数据分…

APP 用户转化率低流失率高?可能您需要了解下这个!

如今手机的性能和内存在突飞猛进,但用户的时间和精力是有限的。根据《 2020 年中国移动 APP 行业分析报告》,在 2019 年 Q4,头部企业所占据手机用户的时长份额已经达到 70.7%。 APP 市场竞争激烈,获客难度和成本在上升&#xff0…

阿里云ECS(CentOS镜像)安装docker

目录 1.前置条件 2.连接至ECS 3.yum软件包更新 4.安装docker前置所需软件包 5.添加docker 官方的 yum 软件源 6.安装docker 7.检测是否成功 8.配置阿里云镜像加速器 1.前置条件 在看本文前保证未安装过docker,或者安装过但是清理干净 如果多次安装失败过,…

网络编程 day6

网络聊天室项目 1.服务器端 #include <head.h> #define SER_IP "192.168.125.11" #define SER_PORT 6666 typedef struct Msg {char user[32]; //用户名int type; //1.登录、2.发消息、0.退出char text[1024]; //消息 } msg_t; typedef struct List…

高德地图官方首度揭秘:红绿灯倒计时功能是如何实现的?

今年元旦&#xff0c;小编喜提新车后&#xff0c;第一次使用高德地图 App 驾车模式&#xff0c;在路口等红灯时立刻被红绿灯倒计时读秒功能惊艳了&#xff0c;竟能够准确地显示红绿灯的剩余时间&#xff01;好奇心驱使我&#xff0c;不禁想弄明白怎么神奇的功能是如何实现的呢&…

SSL通配符免费申请

通配符SSL证书是一种可以用于保护主域名及其所有子域名的证书。通配符SSL证书使用通配符&#xff08;*&#xff09;来代表所有子域名&#xff0c;使得只需一个证书就可以覆盖多个子域名。 要申请通配符SSL证书&#xff0c;您可以按照以下步骤进行&#xff1a; 选择SSL证书提供…

结构体的内存对齐(计算题常考点)

许久不见我考完试回来啦&#xff0c;让我们接着将结构体进行到底&#xff01; 目录 结构体对齐的意义&#xff1a; 结构体对齐的实现&#xff1a; 对齐规则&#xff1a; 训练&#xff1a; 好到这里误区来了&#xff1a; 总结&#xff1a; 往期回顾&#xff1a; 下期预告&…

机器学习周记(第二十六周:文献阅读-DPGCN)2024.1.15~2024.1.21

目录 摘要 ABSTRACT 1 论文信息 1.1 论文标题 1.2 论文摘要 1.3 论文背景 2 论文模型 2.1 问题描述 2.2 论文模型 2.2.1 时间感知离散图结构估计&#xff08;Time-aware Discrete Graph Structure Estimation Module&#xff0c;TADG Module&#xff09; 2.2.2 时间…

DDD系列 - 第9讲 实体、值对象

目录 引言一、实体1.1 数据库实体1.2 数据库实体 vs. DDD实体1.3 DDD实体的本质及其识别规则1.4 代码中如何定义实体二 、值对象2.1 值对象 vs. 附属属性2.2 值对象 vs. 实体2.3 代码中如何定义值对象2.4 何时使用值对象引言 之前我在《DDD系列 - 第4讲 从架构师的角度看待DDD…

html 会跳舞的时间动画特效

下面是是代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta h…

LeetCode 77. 组合

77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&#xff1a;…

说说你对归并排序的理解?如何实现?应用场景?

一、是什么 归并排序&#xff08;Merge Sort&#xff09;是建立归并操作上的一种有效&#xff0c;稳定的排序算法&#xff0c;该算法是采用分治法的一个非常典型的应用 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序&#xff0c;再使…

nodejs下载安装

一、node下载安装 官网下载 官网 根据自己电脑系统选择合适的版本进行下载&#xff0c;我这里选择window 64 位 下载完点击安装 打开cmd查看安装 此处说明下&#xff1a;新版的Node.js已自带npm&#xff0c;安装Node.js时会一起安装&#xff0c;npm的作用就是对Node.js…

Go使用记忆化搜索的套路【以20240121力扣每日一题为例】

题目 分析 这道题很明显记忆化搜索&#xff0c;用py很容易写出来 Python class Solution:def splitArray(self, nums: List[int], k: int) -> int:n len(nums)# 寻找分割子数组中和的最小的最大值s [0]for num in nums:s.append(s[-1] num)#print(s)cachedef dfs(cur,…

Spring boot项目java bean和xml互转

Spring boot项目实现java bean和xml互转 项目场景&#xff1a;互转方法使用jackson进行互转使用jaxws进行xml与bean的互转 搞定收工&#xff01; 项目场景&#xff1a; 工作中需要给下游第三方收费系统做数据挡板&#xff0c;由于下游系统使用的是soap webservice,里面涉及各种…

第91讲:MySQL主从复制集群主库与从库状态信息的含义

文章目录 1.主从复制集群正常状态信息2.从库状态信息中重要参数的含义 1.主从复制集群正常状态信息 通过以下命令查看主库的状态信息。 mysql> show processlist;在主库中查询当前数据库中的进程&#xff0c;看到Master has sent all binlog to slave; waiting for more u…

2024.1.20力扣每日一题——按分隔符拆分字符串

2024.1.20 题目来源我的题解方法一 API工程师(String.splitStream)方法二 模拟 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2788 我的题解 方法一 API工程师(String.splitStream) 直接调用相关API 时间复杂度&#xff1a;O(n)。没有考虑API内部时间 空间复杂度&…

《WebKit 技术内幕》之六(3): CSS解释器和样式布局

3 WebKit布局 3.1 基础 当WebKit创建RenderObject对象之后&#xff0c;每个对象是不知道自己的位置、大小等信息的&#xff0c;WebKit根据框模型来计算它们的位置、大小等信息的过程称为布局计算&#xff08;或者称为排版&#xff09;。 图描述了这一过程中涉及的主要WebKit…