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,设置合理的垃圾回收收集器

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

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

相关文章

SQLite如何处理CSV 虚拟表(三十七)

返回:SQLite—系列文章目录 上一篇:SQLite的DBSTAT 虚拟表(三十六) 下一篇:SQLite的扩展函数Carray()表值函数(三十八) ​ RFC4180格式是一种文本文件格式,被用于表格数据间的交互,也可将表格数据转化…

【机器学习】集成方法---Boosting之AdaBoost

一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型(也称为“基学习器”或“弱学习器”)的输出结果进行集成,以获得比单一模型更好的泛化性…

基于t972 Android9 AP6256,如何在设置中添加5G热点选项,并使其正常打开

通过设置的的WiFi热点选项可以知道关键词“2.4GHz”,因此可以其全局搜索,在packages\apps\Settings\res\values\strings.xml文件下找到如下图所示, 从上面注释可以知道,选项按键选择2.4GHz触发的按键关键词是“wifi_ap_choose_2G…

图床搭建GitHub+PicGo+jsdelivr(CDN)+Typora(内附加速工具)

目录 安装PicGo GitHub配置与加速器 配置PicGo 使用typroa 安装PicGo PicGo是一个用于上传图片的客户端,支持拖拽上传、剪贴板上传,功能十分方便。 下载地址: https://github.com/Molunerfinn/PicGo/releases 个人网盘自取版本2.4.0…

nginx变量自定义日志收集

内置变量 $remote_addr;存放了客户端的地址,注意是客户端的公网IP,也就是一家人访问一个网站,则会显示为路由器的公网IP。 $args;变量中存放了URL中的指令 [rootlocalhost conf.d]# cat pc.conf server {listen 80;se…

【UnityRPG游戏制作】RPG项目的背包系统商城系统和BOSS大界面

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

用于复杂任务的 AI 编码引擎:多文件多步骤拆解实现 | 开源日报 No.239

plandex-ai/plandex Stars: 3.1k License: AGPL-3.0 plandex 是一个用于复杂任务的 AI 编码引擎。 使用长时间运行的代理完成跨多个文件且需要多个步骤的任务将大型任务分解为较小子任务,逐一实现,直至完成整个工作帮助处理积压工作、使用陌生技术、摆…

Gateway结合Nacos使用!!!

一、本地结合使用 1. 引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> 2. bootstarp.yml配置文件 如果Nacos中配置使用yaml格式&…

【牛客网】值周

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 差分。 因为l<100000000,所以数组开1e8。 唯一需要注意的点就是前面给b[0]单独赋值为1&#xff08;因为如果在循环中给b[0]赋值&…

利用大模型提升个性化推荐的异构知识融合方法

在推荐系统中&#xff0c;分析和挖掘用户行为是至关重要的&#xff0c;尤其是在美团外卖这样的平台上&#xff0c;用户行为表现出多样性&#xff0c;包括不同的行为主体&#xff08;如商家和产品&#xff09;、内容&#xff08;如曝光、点击和订单&#xff09;和场景&#xff0…

iOS 实现类似抖音翻页滚动效果

这里是效果图 参考抖音的滚动效果&#xff0c;需要我们在结束拖动的时候&#xff0c;动画设置偏移量 这里有一个注意点&#xff0c;由于我们是在拖动结束的时候&#xff0c;手动改变tableview的偏移量&#xff0c; 改变了tableView 自身原有的的滚动效果&#xff0c;所以我们…

uniapp乡村社区户籍问外来人员管理系统 微信小程序python+java+node.js+php

基于微信小程序的外来人员管理系统项目的概述设计分析&#xff0c;主要内容有的私教预约平台系统平台的具体分析&#xff0c;进行数据库的是设计&#xff0c;数据采用MySQL数据库&#xff0c;并且对于系统的设计采用比较人性化的操作设计&#xff0c;对于系统出现的错误信息可以…

【 书生·浦语大模型实战营】作业(六):Lagent AgentLego 智能体应用搭建

【 书生浦语大模型实战营】作业&#xff08;六&#xff09;&#xff1a;Lagent & AgentLego 智能体应用搭建 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方…

Flutter创建自定义的软键盘

参考代码&#xff1a; Flutter - Create Custom Keyboard Examples 本文贴出的代码实现了一个输入十六进制数据的键盘&#xff1a; &#xff08;1&#xff09;支持长按退格键连续删除字符&#xff1b; &#xff08;2&#xff09;可通过退格键删除选中的文字&#xff1b; &…

这是一个简单的照明材料网站,后续还会更新

1、首页效果图 代码 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>爱德照明网站首页</title><style>/*外部样式*/charset "utf-8";*{margin: 0;padding: 0;box-sizing: border-box;}a{text-dec…

头歌:SparkSQL简单使用

第1关&#xff1a;SparkSQL初识 任务描述 本关任务&#xff1a;编写一个sparksql基础程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

UnityWebGL使用sherpa-ncnn实时语音识别

k2-fsa/sherpa-ncnn&#xff1a;在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 (github.com) 如果是PC端可以直接使用ssssssilver大佬的 https://github.com/ssssssilver/sherpa-ncn…

汽车制造业安全事故频发,如何才能安全进行设计图纸文件外发?

汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工等行业&#xff0c;下游主要为个人消 费、基建、客运和军事等。在汽车制造的整个生命周期中&#xff0c;企业与上下游供应商、合作商之间有频繁、密切的数据交换&#xff0c;企业需要将设计…

在编程的世界里,我相信每一行代码都是一次对未来的投资

&#x1f600;前言 突然有感而发也是激励自己互勉 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 在编程的世界里&#xff0c;我相信每一行代码都是一次对未来的投资类似句子编程的本质代码的价值构建可持续的未来结语 在编程的世界里&#xff0c;我相信每一行代码都是一…

功能测试_分类_用例_方法

总结 测试分类 按阶段分类 是否查看源代码分类 是否运行分类 是否自动化 其他分类 软件质量模型 开发模型-瀑布模型 测试过程模型 v w 测试用例八大要素 用例编号 用例标题 …