Rabbitmq消息确认机制
1.生产者确认机制
确认消息发送到交换机--Confirm方式
1.1普通Confirm方式
private static void sendMsg(Channel channel) throws IOException, InterruptedException {
//开启确认机制
channel.confirmSelect();
//发送消息到exchange
String msg = "hello confirm";
channel.basicPublish("", "no-lost", MessageProperties.PERSISTENT_TEXT_PLAIN, msg.getBytes());
if (channel.waitForConfirms()) {
System.out.println("生产者发布消息至Exchange成功!");
} else {
System.out.println("生产者发布消息至Exchange失败!请重试");
}
}
1.2异步Confirm方式
private static void sendMsg(Channel channel) throws IOException, InterruptedException {
//开启确认机制
channel.confirmSelect();
//发送消息到exchange
String msg = "hello confirm";
for (int i = 0; i < 10; i++) {
channel.basicPublish("", "no-lost", MessageProperties.PERSISTENT_TEXT_PLAIN, (msg + i).getBytes());
}
//开启异步回调
channel.addConfirmListener(new ConfirmListener() {
@Override
public void handleAck(long deliveryTag, boolean multiple) throws IOException {
System.out.println("生产者发布消息至Exchange成功,标示为:" + deliveryTag + ",是否为批量操作:" + multiple);
}
@Override
public void handleNack(long deliveryTag, boolean multiple) throws IOException {
System.out.println("生产者发布消息至Exchange失败,标示为:" + deliveryTag + ",是否为批量操作:" + multiple);
}
});
System.in.read();
}
2.交换机到消息队列的return确认机制
//3开启Return机制
channel.addReturnListener(new ReturnListener() {
@Override
public void handleReturn(int replyCode, String replyText, String exchange, String routingKey, AMQP.BasicProperties properties, byte[] body) throws IOException {
//当送达失败是才会回调
System.out.println(new String(body, "utf-8") + ",消息没有送达到queue中");
}
});
3.消费者确认机制
接收消息成功时
channel.basicAck(envelope.getDeliveryTag(), false);
接收消息失败或进入异常时
try {
//具体业务
int i = 1 / 0;
//确认
channel.basicAck(envelope.getDeliveryTag(), false);
} catch (Exception e) {
if (errorMap.get(new String(body, "UTF-8")) != null) {
System.out.println("消息已重复处理失败,拒绝再次接收...");
channel.basicReject(envelope.getDeliveryTag(), false);
} else {
System.out.println("消息即将再次返回队列处理...");
channel.basicNack(envelope.getDeliveryTag(), false, true);
errorMap.put(new String(body, "UTF-8"), 1);
}
}
}
一般在该消息处理完后执行,该消息才会在队列里面被删除,不然会处于UnAcked的状态存在队列中
finally {channel.basicAck(envelope.getDeliveryTag(), false);
}相关文章:
Rabbitmq消息确认机制
1.生产者确认机制 确认消息发送到交换机--Confirm方式 1.1普通Confirm方式 private static void sendMsg(Channel channel) throws IOException, InterruptedException { //开启确认机制 channel.confirmSelect(); //发送消息到exchange St…...
FinClip 云开发实践(附小程序demo)
在开发一个小程序时,除了考虑界面功能逻辑外,还需要后端的数据支持,开发者需要提前考虑服务器、存储和数据库等相关需求的支持能力,此外还可能需要花费时间精力在部署应用、和依赖服务的建设上。 因此,腾讯小程序为…...
真正好用的工业品ERP系统应该是什么样的?
一个好用的进销存ERP系统应该有以下特点: 1. 全面覆盖企业经营流程,包括采购、销售、库存、财务等模块,能够实现全方位的管理和控制。 2. 自定义配置,灵活地适应大多数用户的需求。 3. 数据精准、实时化,支持统计分…...
Shiro重定向
使用了统一认证,然后每次登录,不能定向到用户指定的界面,非得回到首页,所以做了如下改动 1、在FormAuthenticationFilter中在issueSuccessRedirect中加上五句话。 Overrideprotected void issueSuccessRedirect(ServletRequest …...
Greenplum数据库执行器——PartitionSelector执行节点
为了能够对分区表有优异的处理能力,对于查询优化系统来说一个最基本的能力就是做分区裁剪partition pruning,将query中并不涉及的分区提前排除掉。如下执行计划所示,由于单表谓词在parititon key上,在优化期间即可确定哪些可以分区…...
POJ 2311 Cutting Game
POJ 2311 Cutting Game 题目大意 有一张有whw\times hwh个格子的长方形纸张,两个人轮流将当前的纸张中选一张,并沿着格子的边界将这张纸剪成两部分。最先切出只有一个格子的纸张(111\times 111的纸张)的玩家获胜。当双方都采用最…...
CTF-PHP反序列化漏洞1-基础知识
作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的…...
【面试】记一次安恒面试及总结
文章目录SQL 注入sql注入的原理?如何通过SQL注入判断对方数据库类型?补充一下其他方法判断数据库类型时间盲注的函数XPath注入抓不到http/https包,怎么办?app无自己的ssl证书app有自己的ssl证书-证书绑定(SSL pinning)逻辑漏洞有哪…...
刹车制动(卡钳)TOP3供应商份额超50%,哪些本土供应商突围
作为中国本土底盘系统供应商最早切入的细分市场之一,乘用车(液压)刹车制动器(含卡钳)由连接到车轮的制动盘和位于制动盘边缘的卡钳组成。制动时,高压刹车油推动刹车片夹紧刹车盘,从而产生制动效…...
Go分布式爬虫笔记(二十二)
文章目录22 辅助任务管理:任务优先级、去重与失败处理设置爬虫最大深度避免请求重复设置优先队列设置随机User-Agent失败处理22 辅助任务管理:任务优先级、去重与失败处理 设置爬虫最大深度 目的: 防止访问陷入到死循环控制爬取的有效链接的数量 最大…...
跨线程修改主界面
winform 方式: public delegate void MyInvoke(string str1); private void check_Click(object sender, RoutedEventArgs e) { //跨现场调度1 delete委托 WIMFORM Task.Run(() > { …...
国内ChatGPt研发-中国chatGPT
人工智能软件chatGPT Chat GPT是一种自然语言处理算法,采用了深度学习技术,用于实现文本生成和自然语言处理任务。它可以实现自然而然的人机交互,在自然语言生成和问答领域应用广泛。 值得注意的是,Chat GPT本身并不是一款具体的…...
springboot的rest服务配置服务的根路径
如果不配置默认为空,如下是application.yml文件只配置了端口号 server:port: 6868 那么访问时直接访问服务即可 如果配置了rest服务 RestController RequestMapping("/netLicense") public class NetLicenseController {RequestMapping("/getLice…...
MySQL B+Tree 索引优化技巧
文章目录前言一、BTree索引的基本原理二、BTree索引的性能优化技巧1.索引列的选择2.索引列的顺序3.索引长度4.索引的覆盖性5. 索引的唯一性总结前言 MySQL是一种开源关系型数据库管理系统,被广泛应用于各种应用程序中。作为一种关系型数据库,MySQL使用B…...
100种思维模型之逆向思维模型-46
芒格思考问题总是从逆向开始!正如他经常提到的一句谚语:如果我能够知道我将死在哪里,那么我将永远不去那个地方。 马云有句口头禅:倒立看世界,一切皆有可能! 遇到难题时,不妨回头看看࿰…...
C/C++每日一练(20230413)
目录 1. 与浮点数A最接近的分数B/C 🌟 2. 比较版本号 🌟🌟 3. 无重复字符的最长子串 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…...
volatile和synchronized的区别
volatile和synchronized的区别并发编程三个特性:原子性有序性可见性ViolatedSynchronized区别对比并发编程三个特性: 原子性、有序性、可见性 原子性 volatile无法保证原子性。 synchronized是排它锁,被synchronzied修饰的代码不能被打断…...
Cadence Allegro 导出Unplaced Component Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Unplaced Component Report作用3,Unplaced Component Report示例4,Unplaced Component Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频...
面试了上百位性能测试后,我发现了一个令人不安的事实...
在企业中负责技术招聘的同学,肯定都有一个苦恼,那就是招一个合适的测试太难了!若要问起招哪种类型的测试最难时,相信很多人都会说出“性能测试”这个答案。 每当发布一个性能测试岗位,不一会就能收到上百份简历&#…...
天气预报查询 API + AI 等于王炸(一大波你未曾设想的天气预报查询 API 应用场景更新了)
前言 近年来,随着信息化进程的不断深入,人们对于信息的获取和处理需求越来越高。而其中,天气查询API是一个非常重要的服务,它能够帮助人们快速获取所在位置的天气情况,同时也为各类应用提供了必要的气象数据支持。 本…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
