RabbitMq基础概念知识复习

消息拥有消息头和消息体,消息具有rounting key,主题交换机和扇形交换机都是发布与订阅的实现方式,主题交换机用于匹配接收的消息的rount key 动态匹配模式匹配到多个符合的队列,扇形fanout交换机则不会使用消息的路由key,即便在绑定队列的时候指定了Routing key,也不会有任何效果,它会向所有绑定到当前交换机的队列广播消息,该交换机绑定队列的时候所有的rounting key为空,这样所有被绑定的队列都能收到交换机的消息,实现广播功能。

当点击交换机绑定队列A的时候设置了routing key,并去队列中找到队列A,点击队列A,就会显示队列A被哪个交换机通过哪个rounting key关联。

直连交换机严格根据消息的rounting key 交给直连交换机,接收消息后应答,交换机将消息严格发送到当前绑定下的队列中的rounting key值匹配,只要匹配到交换机就向该队列投送消息,该消息只允许消费一次。

向直连交换机发送10条消息,启动两个完全相同的消费者在不同的端口上消费,每个消息只能被一个消费者消费。2只有一个消息完全处理完,方法运行结束,我们可以接收下一个消息。

RabbitMQ消息确认机制,可靠抵达,生产者发送消息到broker(可能消息丢失),broker将消息送到交换机,交换机把消息投递到队列(消息可能丢失),对列投递消息给监听的消费者

保证消息不丢失,可靠抵达,可以使用事务消息,性能下降250倍,引入确认机制解决

publisher comfirmCallBack确认模式,publisher returnCallback交换机未投递到queue就退回。

consummer ack机制,消费者只有对消息应答后队列才会正真舍弃该条消息。

可靠性抵达需要从两端入手保证,解决方式1事务(发布提交接收消费是一个完整的流程),影响性能不推荐,2可靠抵达confiemCallback 开启的方式如下:

问题:区分@RabbitListener和@RabbitHandler()的区别,使用前者要求该队列的消息的类型为统一类有多个消费者每个消息只会被一个消费者消费,@RabbitHandler()可以根据多个消费者的接收消息体的类型对象不同,特定的消息给特定的消费者消费,也就是@RabbitHandler()注解可以区分消息的内容到指定的消费者上消费,@RabbitListener在类和方法上并且指定监听的队列,@RabbitHandler()没有指定监听的队列当队列有特定的数据类型的消息时会被通道监听并投递给该消费者,也就是非作用在指定队列,监听各个队列的消息类型消费。

当启动消费者监听队列成功时,队列会将所有消息发送到消费者的通道中,此时队列消息总数是n,待确认也是n,待读取的消息0,当消费者消费一个消息时去消费第二个消息,此时队列消息总数n-1,待确认为n-1,这时消费者突然宕机停止消费,服务端队列所有的读取消息,消息总数,待应答的消息都为0,此时消息丢失。解决问题:如果是监听式消费设置开启手动消费确认机制如下

spring.rabbitmq.listener.simple.acknowledge-mode=manual

开启后启动消费之,即便每个消息都没有应答,或消费者宕机服务器上队列中的消息也不会丢失。

场景:当手动确认时有5个消息,非批量,确认2个,停止消费者,发现服务端的队列的消息全为0,消息但消息并没有丢失,消息消费的日志都打印出来,这是终断程序问题,它也会把所有消费的代码运行完成,要查看就对整除2的消息消费,剩下的消息会回退到服务端的队列中。

使用channel.basicAck(tag,是否批量)签收消息,并让队列删除消息,channel.basicNack(tag,是否批量,requeue=true) requeue=true发回服务器,服务器重新入队

 1  rabbitmq的交换机类型,和交换机功能

   2 rabbitMq集群模式,非主从,对等模式,生产者生产消息,会随机到一个节点上,当发现当前队列不在此节点,就会查找该队列所在的节点,并转发过去。

   3 rabbitMq使用了Amqp协议,redis使用reps协议。

   4 rabbitMq应用场景,异步!如传统下订单2s扣库存2s合计4s使用mq做异步主程序降小于4s处理更多请求,把请求给mq让他进行异步投送,可以减轻服务的并发压力,可以控制消费频率,实战消息削峰,解偶等功能

  5 rabbitMq可以性能优化,比如从计算机层面上,设置网卡缓冲大小,减少数据包丢失的情况,可以从jvm上优化,设置合计的jvm数据区大小如xms,xmm,xmn,设置合理的垃圾回收收集器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AIGC调研系列】InternVL开源多模态模型与GPT-4V的性能对比

InternVL和GPT-4V都是多模态模型,但它们在性能、参数量以及应用领域上有所不同。 InternVL是一个开源的多模态模型,其参数量为60亿,覆盖了图像/视频分类、检索等关键任务,并在32个视觉-语言基准测试中展现了卓越性能[2]。InternV…

CYP76AKs的功能分化塑造了鼠尾草属中松香烷型二萜化合物的化学多样性-比较转录组-文献精读12

Functional divergence of CYP76AKs shapes the chemodiversity of abietane-type diterpenoids in genus Salvia "CYP76AKs的功能分化塑造了鼠尾草属中松香烷型二萜化合物的化学多样性",一片比较转录组的文献,类似比较转录组分析揭示了116种…

数据仓库Data Warehouse

数据仓库Data Warehouse 数仓是一种思想,数仓是一种规范,数仓是一种解决方案 1. 数据处理方式 数据处理大致可以分成两大类: 联机事务处理OLTP(on-line transaction processing)联机分析处理OLAP(On-Line Analytical Processing)1.1. OLTP OLTP的全称是On-line Transa…

O2OA开发平台前端源码级二次开发(Vue3,React)

在使用O2OA进行项目定制化开发时,我们可以开发新的前端组件(x_component)以扩展O2OA来实现更多的业务。这种新增前端组件或者前端业务的开发通常会配合后端自定义应用实现的服务来完成系统内数据的交互。在当系统默认的界面不符合系统UI/UE设…

283. 移动零 11. 盛最多水的容器

283. 移动零 把非零的数全交换到前面去 11. 盛最多水的容器 双指针: 双指针一个在头 一个在尾部 计算两个边的盛水量并更新数值 左右两边 哪边矮就移动哪边

区块链快速参考(三)

原文:zh.annas-archive.org/md5/b5e57485b0609afbfba46ff759c5d264 译者:飞龙 协议:CC BY-NC-SA 4.0 第十七章:去中心化应用程序 去中心化应用(DApps)是在去中心化网络上运行的应用程序,不受集…

2024五一杯数学建模B题思路分析 - 未来新城背景下的交通需求规划与可达率问题

文章目录 1 赛题选题分析 2 解题思路详细的思路过程放在文档中 ! ! !!!!!3 最新思路更新 1 赛题 B题 未来新城背景下的交通需求规划与可达率问题 随着城市化的持续发展,交通规划在新兴城市建设中显得尤为关…

Linux搭建靶场

提前准备: 文章中所使用到的Linux系统:Ubantu20.4sqlilabs靶场下载地址:GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 一. 安装phpstudy phpstudy安装命令:wget -O install.sh h…

Map和Set基础

目录 一、导论 二、Map 三、Set 本文找先不涉及两种数据结构的底层,目标是: 理解Map和Set的大体框架,了解他们有什么用,用在哪里的,然后再从浅层深入底层。 小编认为: 先了解也下Map和Set大体是用来做…

Mysql--创建数据库

一、创建一个数据库 “db_classes” mysql> create database db_classes; mysql> show databases; -------------------- | Database | -------------------- | db_classes | | information_schema | | mysql | | performance_schema | |…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号,或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号:https://web.52shizhan.cn/activity/xqt8ly 个人账号:https://web.52shizhan.cn/legal 账号支持全家桶系列:AppCode,CLion,DataGrip,GoLand,Intell…

Codeforces Round 941 (Div. 2) (A~D)

1966A - Card Exchange 题意&#xff1a; 思路&#xff1a;手玩一下发现当存在某个数字个数超过k个&#xff0c;那么就能一直操作下去。那么答案就是k-1. void solve() {cin >> n >> m;map<int,int>mp;int maxx 1;for(int i 0 ; i < n ; i ){int x;c…

手把手教数据结构与算法:优先级队列(银行排队问题)

队列 基本概念 队列的定义 队列&#xff08;Queue&#xff09;&#xff1a;队列是一种常见的数据结构&#xff0c;遵循先进先出&#xff08;First-In-First-Out, FIFO&#xff09;的原则。在队列中&#xff0c;元素按照进入队列的顺序排列。队列是一个线性的数据结构&#x…

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法&#xff0c;它在YOLOv4的基础上引入了多项改进&#xff0c;显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效&#xff0c;它有四个版本&#xff1a;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;分别对应不同的模型大小…

深度学习从入门到精通——词向量介绍及应用

词向量介绍 词向量&#xff08;Word embedding&#xff09;&#xff0c;即把词语表示成实数向量。“好”的词向量能体现词语直接的相近关系。词向量已经被证明可以提高NLP任务的性能&#xff0c;例如语法分析和情感分析。词向量与词嵌入技术的提出是为了解决onehot的缺陷。它把…

pytorch中创建maskrcnn模型

0.模型输入/输出参数参见 链接: pytorch的mask-rcnn的模型参数解释 核心代码 GeneralizedRCNN(这里以mask-rcnn来解释说明) # 通过输入图像获取fpn特征图,注意这里的backbone不是直接的resnet,而是fpn化后的 features self.backbone(images.tensors) # 由于是mask-rcnn,故而…

如何快速搭建nginx服务

华子目录 nginx简介概念特点nginx框架nginx关键工作机制 nginx正向代理功能nginx反向代理功能nginx反向代理的工作流程代理本质 nginx负载均衡部署nginx常用命令systemctl系列nginx自带命令 nginx配置文件主配置文件/etc/nginx/nginx.conf内容结构模块分析配置分析注意示例 ngi…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求&#xff0c;有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题&#xff0c;根据不断尝试&#xff0c;最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

C++ stack、queue以及deque

1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口&#xff1a; 栈&#xff1a;top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列&#xff1a;top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…