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> < ...
随机推荐
- Synchronized与ReentrantLock区别总结(简单粗暴,一目了然)
这篇文章是关于这两个同步锁的简单总结比较,关于底层源码实现原理没有过多涉及,后面会有关于这两个同步锁的底层原理篇幅去介绍. 相似点:这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的 ...
- 常用Hadoop命令(bin)
**** bin 是二进制文件的意思,sbin....据说是superbin(管理员的bin) HDFS命令 某个文件的blocks信息 hadoop fsck /user/xx -files -bl ...
- .NET框架 - NETFramework + API + EF(DBFirst) + MYSQL
.NET框架 - NETFramework + MVC+ EF(DBFirst) + MYSQL 1. 安装3个MYSQL插件 ①mysql-for-visualstudio-1.2.8 vs的 ...
- 081、Weave Scope 多主机监控(2019-04-29 周一)
参考https://www.cnblogs.com/CloudMan6/p/7674011.html Weave Scope 除了监控容器,还可以监控Docker Host. 点击顶部 HOS ...
- python中元组/列表/字典/集合
转自:https://blog.csdn.net/lobo_seeworld/article/details/79404566
- 模块--random
random模块 1 random.random() print(random.random()) 0-1 之间随机小数 不包含1 2 random.uniform(a,b) ...
- LeetCode刷题-004两个排序数组的中位数
给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 . 请找出这两个有序数组的中位数.要求算法的时间复杂度为 O(log (m+n)) . 示例 1:nums1 = [1, 3]num ...
- Linux二进制安装apache2.4.25
Linux二进制安装apache2.4.25 安装环境:CentOS 6.2 先检查是否安装了Apache 如通是通过rpm包安装的话直接用下面的命令:rpm -q httpd 也可以使用如下两种方法 ...
- makefile 嵌套
目录结构: dynamic 和 static 两个目录实现加法功能, 分别生成动态库和静态库, main.c 主文件链接加法功能, 终端命令执行: make dynamic=1 则编译动态 ...
- 获取iframe 内容
parent.$.find("iframe")[0].contentWindow.getvalue(); h.find("iframe")[0].content ...