rabbitmq生产与消费
一、rabbitmq发送消息
一、简单模式
概述
一个生产者一个消费者
模型

代码
//没有交换机,两个参数为routingKey和消息内容
rabbitTemplate.convertAndSend("test1_Queue","haha");
二、工作队列模式
概述
一个生产者,多个消费者,消费者之间负载均衡
模型

代码
//没有交换机,两个参数为routingKey和消息内容rabbitTemplate.convertAndSend("test1_Queue","haha");
三、发布订阅模式
概述
生产者把消息给交换机,交换机把消息推送给与它绑定的所有队列,消费者监听自己的队列
模型

代码
//该模式下,交换机与队列绑定无需routingkey,因此效率最高
rabbitTemplate.convertAndSend("fanout_Exchange","","lala");
四、路由模式
概述
交换机与队列由routing key绑定,生产者发送消息时指定交换机和routing key,则对应的队列便会收到消息
模型

代码
rabbitTemplate.convertAndSend("direct_Exchange","test1_Queue","lala");
五、主题模式(通配符模式)
概述
交换机与队列由routing key绑定,但routing key由通配符和具体的字符组成,生产者输入具体的字符,交换机根据routing key的规则模糊匹配到对应的队列,则对应的队列会收到消息
模型

代码
/*** 交换机与队列绑定* @return*/
@Bean
Binding truckHistoryBinding(){return BindingBuilder.bind(test1Queue()).to(topicExchange()).with("*.test1.*");
}@GetMapping("/sendMessage")
public void sendMessage() {//需要字符串的模糊匹配,效率最低rabbitTemplate.convertAndSend("topic_Exchange","aa.test1.cc","lala");
}
二、rabbitmq接收消息
一、拉模式
概述
消费者可以主动拉取队列里的消息
代码
rabbitTemplate.execute(channel->{//通过channel.basicGet方法可以单条获取消息,其返回值时GetReponseGetResponse response = channel.basicGet("my_queue",false);String message = new String(response.getBody());}
)
二、推模式
概述
通过发布订阅模式,订阅队列里的消息
代码
@RabbitListener(queues="my_queue")public void onMessage(Message messge,Channel channel){String msg = new String (message.getBody());}
三、消息的手动确认
注意:
手动确认需要先将自动确认的配置注释掉;
消息确认模式有:
AcknowledgeMode.NONE:自动确认
AcknowledgeMode.AUTO:根据情况确认
AcknowledgeMode.MANUAL:手动确认
默认情况下消息消费者是自动 ack (确认)消息的,如果要手动 ack(确认)则需要修改确认模式为 manual
spring:rabbitmq:listener:simple:acknowledge-mode: manual
或在 RabbitListenerContainerFactory 中进行开启手动 ack
@Bean
public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(new Jackson2JsonMessageConverter());factory.setAcknowledgeMode(AcknowledgeMode.MANUAL); //开启手动 ackreturn factory;
}
消费消息手动确认的监听器
获取消息消费的唯一标识
message.getMessageProperties().getDeliveryTag();
执行业务处理
消息确认
//消费消息的手动确认,消息确认成功-basicAck//第一个参数deliveryTag,消息的唯一标识//第二个参数multiple,消息是否支持批量确认,如果是true,代表可以一次性确认标识小于等于当前标识的所有消息//如果是false,只会确认当前消息channel.basicAck(deliveryTag,false);
消息确认失败处理,根据条件判断设置是否重回队列 ,是否支持批量处理
//说明消费消息处理失败,如果不进行确认(自动确认,投递成功即确认,消费是否正常,不关心),消息就会丢失//消息处理失败确认,代表消息没有正确消费,注意:此种方式一次只能确认一个消息//第一给参数是消息的唯一标识,//第二个参数是代表是否重回队列,如果是true,重新将该消息放入队列,再次消费//注意:第二个参数要谨慎,必须要结合具体业务场景,根据业务判断是否需要重回队列,一旦处理不当,机会导致消息循环入队,消息挤压//不重回队列 require = false
// channel.basicReject(deliveryTag,false);//重回队列 require = truechannel.basicReject(deliveryTag,true);//消息处理失败确认,代表消息没有正确消费,注意,此种方式支持批量//第一个参数是消息的唯一标识,//第二个参数是代表是否支持批量确认//第三给参数代表是否重回队列//不重回队列 require = falsechannel.basicNack(deliveryTag,true,false);//重回队列 require = truechannel.basicNack(deliveryTag,false,true);
相关文章:
rabbitmq生产与消费
一、rabbitmq发送消息 一、简单模式 概述 一个生产者一个消费者模型 代码 //没有交换机,两个参数为routingKey和消息内容 rabbitTemplate.convertAndSend("test1_Queue","haha");二、工作队列模式 概述 一个生产者,多个消费者&a…...
spring-boot3.x整合Swagger 3 (OpenAPI 3) +knife4j
1.简介 OpenAPI阶段的Swagger也被称为Swagger 3.0。在Swagger 2.0后,Swagger规范正式更名为OpenAPI规范,并且根据OpenAPI规范的版本号进行了更新。因此,Swagger 3.0对应的就是OpenAPI 3.0版本,它是Swagger在OpenAPI阶段推出的一个…...
SM2隐式证书用户公私钥生成python代码实现
GMT0130-2023具体描述基于SM2算法的隐式证书公钥机制,这里尝试Python代码实现密钥生成部分功能,具体如下,椭圆曲线计算实现使用python第三方包gmssl。 #生成用户私钥Da和公钥Pa,其中Da(tAdA)mod N,Pa可以直…...
IEC104转MQTT网关快速实现了IEC104到MQTT的转换和数据交互
随着智能电网技术的不断进步,IEC 104(IEC 60870-5-104)协议作为电力系统中重要的远动通信标准,正逐步融入更广泛的物联网生态系统中。亚马逊AWS(Amazon Web Services),作为全球领先的云计算服务…...
【OpenCV C++20 学习笔记】调节图片对比度和亮度(像素变换)
调节图片对比度和亮度(像素变换) 原理像素变换亮度和对比度调整 代码实现更简便的方法结果展示 γ \gamma γ校正及其实操案例线性变换的缺点 γ \gamma γ校正低曝光图片矫正案例代码实现 原理 关于OpenCV的配置和基础用法,请参阅本专栏的其…...
web UI自动化测试 浏览器模式设置
自动化之浏览器模式设置 做selenium UI自动化测试时,每次都需要启动浏览器、用例运行结束后再关闭浏览器,浏览器启动相当地耗费时间,在本机运行用例的话还得放开双手,可以使用chrome的headless模式,让浏览器在后台运行…...
OpenCV图像滤波(1)双边滤波函数bilateralFilter的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 功能描述 bilateralFilter是图像处理和计算机视觉领域中的一种高级图像滤波技术,特别设计用于在去除噪声的同时保留图像的边缘和细节。相比于传…...
前端开发使用Big.js精算避免误差
1、下载 npm install big.js 全局引入还是局部引入可根据项目框架及个人需求 2、静态引入 < script src https://unpkg.com/big.js6.0.0/big.mjs > </ script > 或者 import Big from https://raw.githubusercontent.com/mikemcl/big.js/v6.0.0/big.mjs; i…...
在 Ubuntu 22.04/20.04 安装 CVAT 和 SAM 指南
1. 安装 Docker 和 Docker Compose sudo apt-get update sudo apt-get --no-install-recommends install -y \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-ke…...
【SpringCloud】 微服务分布式环境下的事务问题,seata大合集
目录 微服务分布式环境下的事务问题 分布式事务 本地事务 BASE理论与强弱一致性 BASE理论 强弱一致性 常见分布式事务解决方案 - 2PC 常见分布式事务解决方案 - TCC 常见分布式事务解决方案 - 最大努力通知 常见分布式事务解决方案 - 最终一致性 Seata介绍与术语 Seata…...
vite5+vue3开发阅读APP实战笔记20240725
目前界面长成这样: 配置别名 修改vite.config.js import {defineConfig} from vite import vue from vitejs/plugin-vue import path from "path"// https://vitejs.dev/config/ export default defineConfig({server: {open: true,port: 8088,},plug…...
Intel任命Micron技术开发主管领导Intel Foundry制造运营
- **新闻要点**:Intel聘请了Micron的技术开发主管Dr. Naga Chandrasekaran担任首席全球运营官、执行副总裁以及Intel Foundry制造和供应链组织的总经理。他将负责Intel的所有制造运营事务。 #### 任命背景 - **领导团队**:Chandrasekaran将成为Intel执行…...
苹果发布iOS 18 Beta 4,新增CarPlay 壁纸等多项功能改进
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点 iOS 18 Beta 4:新功能与改进的探索 苹果公司在2024年7月9日向开发者推送了iOS 18的第四个开发者预览版Beta 4更新,内部…...
谷粒商城实战笔记-50-51-商品分类的删除
文章目录 一,50-商品服务-API-三级分类-删除-逻辑删除1,逻辑删除的配置1.1 配置全局的逻辑删除规则(可省略)1.2 配置逻辑删除Bean(可省略)1.3 Bean相应字段上加上注解TableLogic 2,后台接口开发…...
vue3+g2plot实现词云图
词云图 效果预览: 核心代码: import {WordCloud } from @antv/g2plot;fetch(https://gw.alipayobjects.com/os/antfincdn/jPKbal7r9r/mock.json).then((res) => res.json()).then((data) => {const wordCloud = new WordCloud(container, {data,wordField: x,weigh…...
Golang | Leetcode Golang题解之第273题整数转换英文表示
题目: 题解: var (singles []string{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}teens []string{&…...
使用C#手搓Word插件
WordTools主要功能介绍 编码语言:C#【VSTO】 1、选择 1.1、表格 作用:全选文档中的表格; 1.2、表头 作用:全选文档所有表格的表头【第一行】; 1.3、表正文 全选文档中所有表格的除表头部分【除第一行部分】 1.…...
WordPress主题追格企业官网主题免费开源版V1.1.6
追格企业官网主题免费开源版由追格开发的一款开源wordpress主题,专为企业建站和追格企业官网小程序(开源版)PC配套而设计,功能集新闻动态、留言反馈、产品与服务、公司简介、联系我们等模块。...
uniapp引入自定义图标
目录 一、选择图标,加入购物车 二、下载到本地 三、导入项目 四、修改字体引用路径 五、开始使用 这里以扩展iconfont图标为例 官网:iconfont-阿里巴巴矢量图标库 一、选择图标,加入购物车 二、下载到本地 直接点击下载素材࿰…...
pytorch-scheduler(调度器)
scheduler简介 scheduler(调度器)是一种用于调整优化算法中学习率的机制。学习率是控制模型参数更新幅度的关键超参数,而调度器根据预定的策略在训练过程中动态地调整学习率。 优化器负责根据损失函数的梯度更新模型的参数,而调度器则负责调整优化过程中使用的特定参数,通…...
s2-pro音色复用效果实测:同一参考音频在不同文本长度下的泛化能力
s2-pro音色复用效果实测:同一参考音频在不同文本长度下的泛化能力 1. 测试背景与目的 s2-pro作为Fish Audio开源的专业级语音合成模型镜像,其核心亮点之一是支持通过参考音频复用音色。这项功能在实际应用中极为实用,比如: 企业…...
红枣切片机的设计【说明书+CAD图纸+solidworks三维+开题报告+答辩PPT】
红枣切片机的设计聚焦于提升切片效率与切片质量,其核心作用在于通过机械结构优化与传动系统设计,实现红枣的自动化、标准化切片加工。设备采用旋转刀盘与固定进料轨道的协同工作模式,刀盘以均匀转速旋转,红枣在重力与轨道约束下依…...
QwQ-32B在自然语言处理中的实战应用
QwQ-32B在自然语言处理中的实战应用 1. 引言:当NLP遇上推理专家 自然语言处理(NLP)领域最近迎来了一位强力选手——QwQ-32B。这不是普通的语言模型,而是一个专门为推理和思考设计的模型。想象一下,你有一个不仅能理解…...
DAMO-YOLO手机检测一文详解:tinynas主干网络轻量化设计优势
DAMO-YOLO手机检测一文详解:tinynas主干网络轻量化设计优势 1. 引言:为什么我们需要一个又快又准的手机检测器? 想象一下,你正在开发一个智能会议室管理系统,需要实时统计参会人数和他们的行为。其中一个关键功能是检…...
Windows下OpenClaw全流程指南:接入Qwen3.5-4B-Claude完成办公自动化
Windows下OpenClaw全流程指南:接入Qwen3.5-4B-Claude完成办公自动化 1. 为什么选择OpenClaw做办公自动化 去年我接手了一个新项目,每周需要处理几十份会议录音转写的文字稿。手动整理不仅耗时,还经常漏掉关键行动项。当我第一次听说OpenCla…...
【shell】shell实现交互式输入与超时处理
1. Shell脚本交互式输入基础 在Shell脚本编程中,交互式输入是最基础也最常用的功能之一。想象一下这样的场景:你写了一个自动安装软件的脚本,需要用户确认是否继续;或者开发了一个配置工具,需要用户输入IP地址和端口号…...
计算机毕设 java 基于 Javaweb 的家教管理系统 智能家教匹配管理系统 家教服务综合平台
计算机毕设 java 基于 Javaweb 的家教管理系统 f7xm39(配套有源码 程序 mysql 数据库 论文)本套源码可以先看具体功能演示视频领取,文末有联 xi 可分享随着家庭教育需求的不断增长,家教市场规模持续扩大,但传统家教模式…...
硅基神经植入体耐久性研究新突破
神经植入体包含构建在硅材料上的集成电路(IC),即通常所说的芯片。这些植入体需要做到小巧且柔韧,以模拟人体内部的环境。然而,人体内的环境具有腐蚀性,这引发了人们对可植入硅IC耐久性的担忧。一支研究团队…...
别再硬编码了!用Flowable 6.8.0实现多部门并行审批,动态分配处理人就这么简单
Flowable 6.8.0实战:动态多部门审批的架构设计与实现 上周在重构公司采购审批系统时,遇到一个典型场景:技术部需要评估设备参数,财务部审核预算,法务部检查合同条款——这三个部门的审批必须并行执行,且每个…...
“COMSOL 18650电池组蛇形液冷模型:集总电池组耦合传热与流场模拟”
comsol18650电池组蛇形液冷模型 采用集总电池组耦合传热和流场 模拟圆柱形电池模组在外部液冷散热下的热性能,电性能等锂离子电池模组在快充场景下产生的热量能直接让表面温度突破60℃,这对电动车的安全性和寿命都是致命威胁。去年参与某车企电池包项目时…...
