RabbitMQ 消息确认机制以及lazy queue+ disk消息持久化
一:Basic的一些属性,一些方法
1. 消费端的确认
自动确认: message出队列的时候就自动确认【broke】 basicget。。。
手工确认: message出队列之后,要应用程序自己去确认是否已经消费完毕,如果consumer拿到message之后,没有手工确认,这个时候message不会被丢失
void BasicAck(ulong deliveryTag, bool multiple);
multiple: true,表示的所有message都会被确认。。。。
手工拒绝: consumer拒绝服务器发送过来的消息。。。
《1》 直接扔了。。。
《2》 给快递师傅。。。
重新递送: 【商家补发】 快递丢单。。。商家只能重新发一次。。。
Basic提供了那些方法来做到这些事情。
//扔掉消息
channel.BasicReject(result.DeliveryTag, false);
//退回消息
channel.BasicReject(result.DeliveryTag, true);
//批量退回或删除,中间的参数 是否批量 true是/false否 (也就是只一条)
channel.BasicNack(result.DeliveryTag, true, true);
//补发消息 true退回到queue中(有可能被其它的consumer接收到)/false只补发给当前的consumer
channel.BasicRecover(true);
2. 发布端的确认 手工确认消息是否已经发送到了broke。。。。
confirm机制。。。
tx机制: 【事务控制】
publish 送message到rabbitmq中,我们一定要知道,这个消息已经发送成功了。。。。 也就是,rabbitmq
一定要告诉publish,这条消息已经被确认收到。。。
影响性能的,,, confirm机制 < tx机制【最耗费性能】
//发布确认
channel.ConfirmSelect();
for (int i = 0; i < 10; i++)
{
channel.BasicPublish(string.Empty, "mytest", null, Encoding.UTF8.GetBytes(string.Format("{0} 你好", i)));
}
var isallpublished = channel.WaitForConfirms();
我们声明队列和交换机的时候设置了持久化,并且将队列和交换机保存到了mnesia数据库中,但是我们发布的消息如何进行持久化?
通过懒队列 lazy queue 设置
lazy queue+ disk,消息放到磁盘到
//声明一个懒队列
channel.QueueDeclare("lazyqueue", true, false, false, new Dictionary<string, object>
{
{ "x-queue-mode","lazy"}
});
RabbitMQ 消息确认机制以及lazy queue+ disk消息持久化的更多相关文章
- RabbitMQ 消息确认机制
消息确认机制 在之前异常处理部分就已经写了,对于consumer的异常退出导致消息丢失,可以时候consumer的消息确认机制.重复的就不说了,这里说一些不一样的. consumer的消息确认机制 当 ...
- (转)RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- RabbitMQ消息队列(九):Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...
- springboot + rabbitmq 用了消息确认机制,感觉掉坑里了
本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...
- Rabbitmq可靠消息投递,消息确认机制
前言 我们知道,消息从发送到签收的整个过程是 Producer-->Broker/Exchange-->Broker/Queue-->Consumer,因此如果只是要保证消息的可靠投 ...
- 消息队列RabbitMQ(三):消息确认机制
引言 RabbitMQ的模型是生产者发送信息到 Broker (代理),消费者从 Broker 中取出信息.但是生产者怎么知道消息是否真的发送到 Broker 中了呢?Broker 又怎么知道消息到底 ...
- RabbitMQ (十二) 消息确认机制 - 发布者确认
消费者确认解决的问题是确认消息是否被消费者"成功消费". 它有个前提条件,那就是生产者发布的消息已经"成功"发送出去了. 因此还需要一个机制来告诉生产者,你发送 ...
- RabbitMQ - Publisher的消息确认机制
queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于 ...
- RabbitMQ学习笔记之五种模式及消息确认机制
本文详细介绍简单模式Simple.工作模式Work.发布订阅模式Publish/Subscribe.Topic.Routing. Maven依赖引用 <dependencies> < ...
随机推荐
- CCF201812-3 CIDR合并
按题意模拟即可...主要CCF吞代码... #include<bits/stdc++.h> #define pb push_back #define mp make_pair #defin ...
- MySQ数据备份
MySQL备份概述 问题:备份和冗余有什么区别? 备份:能够防止由于机械故障以及人为操作带来的数据丢失,例如将数据库文件保存在了其它地方. 冗余:数据有多份冗余,但不等于备份,只能防止机械故障带来的数 ...
- python学习day20 面向对象(二)类成员&成员修饰符
1.成员 类成员 类变量 绑定方法 类方法 静态方法 属性 实例成员(对象) 实例变量 1.1实例变量 类实例化后的对象内部的变量 1.2类变量 类中的变量,写在类的下一级和方法同一级. 访问方法: ...
- python_unittest学习小结
- Gradle里面两个 依赖管理插件,可以不用关心 具体jar版本号
引用:https://spring.io/blog/2015/02/23/better-dependency-management-for-gradle Using the plugin with S ...
- html中设置锚点定位
1.使用id定位: (这样的定位可以针对任何标签来定位. ) <a name="1F" href="#1F">锚点1</a> <d ...
- Hadoop 生产配置文件V2
Hadoop 生产配置文件V2 生产环境的配置文件调优 !!! Apache Hadoop 2.7.3 && NN HA && RM HA且仅针对于HDFS & ...
- Vue学习笔记五:事件修饰符
目录 什么是事件修饰符 没有事件修饰符的问题 HTML 运行 使用事件修饰符 .stop阻止冒泡 .prevent 阻止默认事件 .capture 添加事件侦听器时使用事件捕获模式 .self 只当事 ...
- VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) UP BROADCAST MULTICAST 问题
VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址(intet addr.Bcast.Mask) UP BROADCAST MULTICAST 问题 eth0:网络接口 ...
- selenium定位方式-Xpath使用方法
什么是Xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 一. 在火狐浏览器上安装Xpath 方法如下: 1.使用 Firefox 访问 https://a ...