当前位置: 首页 > news >正文

RabbitMQ再回首--往事如梦

这文章你就读吧,越读越🥸,一读一个不吱声 

可靠的🐰警官:rabbitMQ,功能全面,不丢数据,体量小,容易堆积

声明exchange
channel . exchangeDeclare ( String exchange , String type , boolean durable , boolean
autoDelete , Map < String , Object > arguments ) throws IOException ;
  
   durable=false 我勒个天才 会丢消息哒,broker重启之后 exchange就从这个世界上消失了,pro还怎么发消息 啊!
声明queue
channel . queueDeclare ( String queue , boolean durable , boolean exclusive , boolean
autoDelete , Map < String , Object > arguments );
      exclusive 排他队列:仅对 首次 申明它的 连接 可见,连接断开自动删除
          同一连接不同信道:可以访问同一连接创建的排他队列
          
  1. type=QuorumStream,默认持久化:durable=true,exclusive=false
Map<String,Object> params = new HashMap<>();
params.put("x-queue-type","stream");
params.put("x-max-length-bytes", 20_000_000_000L); //日志文件的最大字节数 maximum stream size:20 GB
params.put("x-stream-max-segment-size-bytes", 100_000_000); //每一个日志文件的最大大小 size of segment files: 100 MB
channel.queueDeclare(QUEUE_NAME, true, false, false, params);

   queue持久化不代表消息持久化,消息要看消息的:basicPublish

   单队列持久化 重启之后 消息会离你而去,单消息持久化 重启之后 消息早跑了 妥妥的

exchange与queue绑定关系

channel . queueBind ( String queue , String exchange , String routingKey ) throws
IOException ; // Producer 发送过来的消息将分到哪些 Queue
发送到queue
void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException;
void basicPublish(String exchange, String routingKey, boolean mandatory, BasicProperties props, byte[] body) throws IOException;
void basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body) throws IOException;
AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder();
//对应页面上的Properties部分,传入一些预定的参数值。
builder.deliveryMode(MessageProperties.PERSISTENT_TEXT_PLAIN.getDeliveryMode());//持久化
builder.priority(MessageProperties.PERSISTENT_TEXT_PLAIN.getPriority());//持久化
//builder.headers(headers);对应页面上的Headers部分。传入自定义的参数值
builder.build()
AMQP.BasicProperties prop = builder.build();

RabbitMQ持久化机制-CSDN博客

public BasicProperties(String contentType,//消息类型如:text/plainString contentEncoding,//编码Map<String,Object> headers,Integer deliveryMode,//1:nonpersistent不持久化 2:persistent持久化Integer priority,//优先级String correlationId,String replyTo,//反馈队列String expiration,//expiration到期时间String messageId,Date timestamp,String type,String userId,String appId,String clusterId)

consumer消费消息

  • 被动消费:服务器推送,消费者设置缓冲区缓存,效率是高了但是缓冲区可能溢出 一口胖成🪣(这届奥运会的谐音梗 你懂不懂)
       channel . basicConsume ( String queue , boolean autoAck , Consumer callback );#不断推送
           每个channel有独立线程,一个channel一个消费比较推荐,做channel最重要的 专一
String basicConsume(String queue, DeliverCallback deliverCallback, CancelCallback
cancelCallback, ConsumerShutdownSignalCallback shutdownSignalCallback) throws
IOException;Callback,可实现handle方法
  • 主动消费:拉取msg,需要时拉取 增加消息延迟/降低系统吞吐量;单条 注意啊 单条

       GetResponse response = channel.basicGet(QUEUE_NAME, boolean autoAck);

        autoAck=true,消息被consumer消费成功后,无法再消费,一次性的 懂?

        autoAck=false,需手动调channel.basicAck(),不凋则重复消费 资源多就是这么豪横

Rabbit MQ 消息消费模式_rabbitmq消费模式-CSDN博客

消费场景

 他又来了 真的是 大水冲了龙王庙 不是一家人不进一家门

一,pro 送一个 msg 到que,不需要exchange,con按que 消费

二,pro发送msg到que,多con消费同一个队列queue

  • con 的autoAck=false,调channel.basicAck通知服务器消息完成,否则重复消费
  • msg持久,queue不能被多次定义,一旦接受了durable的设定就守身如玉,及时改了 骨子里还是durable
  • channel.basicQos(prefetchCount) ;consumer同时处理msg个数,发送msg前检查发送但未收到basicAck有几个,如超过prefetchCount则换一个consumer;这样始乱终弃当然有问题了,all节点都超了,怎么办?宝宝就问你怎么办?及时发现 添加节点 再者你就换 下一个更乖
三,发布订阅 type=fanout
   pro消息发exchange,将消息路由到绑定的队列,队列对应一个消费者
    channel . exchangeDeclare ( EXCHANGE_NAME , "fanout" );type=fanout,向绑定的队列发送msg
   
// 创建连接和通道
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();// 声明交换器
String exchangeName = "publishSubscribeExchange";
channel.exchangeDeclare(exchangeName, "fanout");// 创建随机队列并绑定到交换器
String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, exchangeName, "");// 发送消息
String message = "Hello, RabbitMQ!";
channel.basicPublish(exchangeName, "", null, message.getBytes("UTF-8"));
System.out.println("Sent message: " + message);// 接收消息
boolean autoAck = true;
Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body, "UTF-8");System.out.println("Received message: " + message);}
};
channel.basicConsume(queueName, autoAck, consumer);
四,路由 type=direct
五,topic
pro通过通配符匹配路由键,交换机将消息 路由到 它绑定的队列 匹配的路由键的队列中,这就话是不是很绕,让我来用中文翻译一下:交换机 把消息发送到 配置了同样路由键的队列中
RabbitMQ的五种常见消费模型_rabbit mq消费模式-CSDN博客

相关文章:

RabbitMQ再回首--往事如梦

这文章你就读吧&#xff0c;越读越&#x1f978;&#xff0c;一读一个不吱声 可靠的&#x1f430;警官&#xff1a;rabbitMQ&#xff0c;功能全面&#xff0c;不丢数据&#xff0c;体量小&#xff0c;容易堆积 声明exchange channel . exchangeDeclare ( String exchange , …...

头狼择校小程序

综述介绍 头狼择校&#xff0c;是头狼择™高校的简称&#xff0c;我们专注高校、大学的择校。倡导先嗅就业再择校&#xff0c;是预约工具和对话平台。帮您嗅招办、嗅教授、嗅学姐&#xff0c;预约择校有关的老师、顾问&#xff0c;助力考大学和考研的“双考”学生及家长了解就…...

【Electron】npm安装Electron项目失败报错问题和解决办法

前言 闲来无事&#xff0c;便想着研究一下Electron&#xff0c;没想到安装直接就卡住了 问题 npm ERR! RequestError: Hostname/IP does not match certificates altnames: Host: npm.taobao.org. is not in the certs altnames: DNS:*.tbcdn.cn, DNS:*.taobao.com, DNS:*.al…...

人工智能提示(prompt)工程入门

文章目录 人工智能提示&#xff08;prompt&#xff09;工程入门一、目的二、使用1、角色2、提示3、上下文4、例子5、输入6、输出 三、使用示例 人工智能提示&#xff08;prompt&#xff09;工程入门 一、目的 对于当前的发达的人工智能&#xff0c;我们可以广泛使用&#xff0…...

【机器学习的基本思想】模型优化与评估

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科&#xff0c;通过算法和模型让计算机从数据中学习&#xff0c;进行模型训练和优化&#xff0c;做出预测、分类和决策支持。Python成为机器学习的首选语言&#xff0c;…...

公司电脑监控软件推荐(一口气了解8款!)一起领略电脑监控界的刀光剑影!

企业的内部管理的需求日益复杂&#xff0c;电脑监控软件作为提升工作效率、保障数据安全的重要工具&#xff0c;其重要性不言而喻。今天&#xff0c;我们将带您一口气了解8款顶尖的公司电脑监控软件&#xff0c;包括国内知名的“安企神”以及多款来自海外的优秀产品&#xff0c…...

设备图纸资料管理系统:数字化转型下的高效协同与安全管理新篇章

在当今高度信息化的时代&#xff0c;设备图纸资料管理系统作为企业资产与知识管理的重要一环&#xff0c;正日益凸显其不可或缺的价值。这一系统集成了先进的数字化技术与管理理念&#xff0c;旨在实现设备图纸资料的高效存储、快速检索、安全共享及版本控制&#xff0c;为企业…...

ArcGIS基础:标注转注记及简单处理

注记是一个静态的标签图层&#xff0c;能够独立的保存为文件&#xff0c;并且具有计算功能&#xff1b; 标注是一个动态的标签图形&#xff0c;无法以文件的形式进行存储和计算&#xff1b; 2者各有优势和劣势&#xff0c;根据具体需求进行选择 需要注意的是注记要存储在GDB…...

jQuery实现图片轮播效果

实现图片轮播效果&#xff0c;打开页面&#xff0c;每隔3秒切换至下一张图片&#xff1b;光标移入数字时&#xff0c;播放相应图片。 思路&#xff1a; &#xff08;1&#xff09;获取需要轮播的图片和展示的div。 &#xff08;2&#xff09;使用animate设置left值&#xff…...

关于天地图新手使用

1分钟带你了解学习天地图 适用新手 天地图API (tianditu.gov.cn) 文档api 先去注册key 把脚本放到index.html文件里面 <!-- 天地图的官网申请的tk --> <script src="http://api.tianditu.gov.cn/api?v=4.0&tk=申请的key" type="text/javascr…...

STM32与Arduino和ESP32对比分析

在嵌入式系统领域&#xff0c;STM32、Arduino 和 ESP32 是三种广泛使用的微控制器平台。它们各自具有独特的优势&#xff0c;适用于不同类型的项目。本文将详细比较这些平台&#xff0c;帮助您了解它们之间的差异、优势以及可能的应用场景。 一、架构与处理能力 STM32&#xf…...

125. 验证回文串【 力扣(LeetCode) 】

一、题目描述 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b…...

3年经验,面试测试岗20k都拿不到了吗?

我的情况 大概介绍一下个人情况&#xff0c;女&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…...

【ML】强化学习(Reinforcement Learning)及其拆解

【ML】强化学习&#xff08;Reinforcement Learning&#xff09; 1. RL Outline 强化学习&#xff08;Reinforcement Learning&#xff09;概述1.1 RL的基本框架 2. RL 引入&#xff1a;从这个小游戏开始3. Policy Gradient 方法4. Actor-Critic 方法5. [奖励塑形&#xff08;R…...

在宝塔面板下安装WordPress

宝塔面板是服务器管理好助手&#xff0c;尤其在Linux系统下&#xff0c;提高了管理的可视化&#xff0c;降低了Linux服务器的使用门槛。 WordPress是个非常好的博客系统&#xff0c;由于支持海量主题模板、各种类型的插件&#xff0c;因此已经成为建设各类网站的首选框架。 今…...

纷享销客CRM AI产品架构概览、产品特色

一、纷享销客CRM AI产品架构概览 纷享AI平台架构分为三个主要层次&#xff1a;AI基础设施层、AI平台层和AI应用层。每个层次都由一系列功能模块组成&#xff0c;旨在为客户提供强大的技术支持和灵活的解决方案。 1.Al基础设施层 AI基础设施层是整个AI平台的底层支撑&#xff…...

【文件IO】文件系统操作

文章目录 基本操作概述1. 文件属性2. 文件构造方法3. 文件方法1. 文件创建2. 文件删除3. 查看目录下所有的文件名4. 遍历目录5. 创建目录5. 目录重命名 基本操作概述 创建文件删除文件创建目录重命名文件判定文件存在… Java 中&#xff0c;提供了一个 File 类&#xff0c;进…...

Spring Cloud Alibaba 集成分布式定时任务调度功能

作者&#xff1a;千习 背景简介 定时任务是指在约定的时间&#xff0c;或者按照固定频率周期性执行的任务。在企业应用中&#xff0c;非用户行为发起的后台业务&#xff0c;一般都是通过定时任务来实现&#xff0c;常见场景如下&#xff1a; 异步数据处理&#xff1a;比如先…...

中职云计算实训室

一、实训室建设背景 随着信息技术的飞速发展&#xff0c;云计算已成为推动数字化转型、促进经济社会发展的重要力量。《中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要》明确提出&#xff0c;要加快数字化发展&#xff0c;建设数字中国。云计算作为数…...

【python制作一个小程序作为七夕礼物】

制作一个七夕节礼物的小程序&#xff0c;我们可以考虑一个简单的互动程序&#xff0c;比如一个“七夕情侣姓名配对指数计算器”。这个程序将接收两个名字作为输入&#xff0c;然后输出一个随机的“配对指数”和一些浪漫的话语。以下是一个使用Python实现的简单示例&#xff1a;…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...