首页 > 其他分享 >RabbitMQ-消息消费确认

RabbitMQ-消息消费确认

时间:2025-01-13 22:24:05浏览次数:1  
标签:消费 ea 确认 RabbitMQ 消息 message consumer channel

我们一般使用的是消费者作为被动方接收 RabbitMQ 推送消息,另一种是消费者作为主动方可以主动拉取消息。

RabbitMq 服务器推送消息分为隐式(自动)确认和显示确认。

1 消费者拉取消息

消费者作为主动方拉取消息,每次只能获取一条。

using (var channel = connection.CreateModel())
{
    BasicGetResult result = channel.BasicGet("PersistenceQueue", true);
    string message = Encoding.UTF8.GetString(result.Body.ToArray());
    Console.WriteLine($"拉取到消息:{message}");
}

2 RabbitMq服务器推送消息

消费者作为被动方接收RabbitMQ推送消息。

using (var channel = connection.CreateModel())
{
    EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
    //就是Rabbitmq的服务器作为主动方---RabbitMq 推送消息到消费者来的;
    consumer.Received += (model, ea) =>
    {
        string message = Encoding.UTF8.GetString(ea.Body.ToArray());
        Console.WriteLine($"正常收到消息:{message}");
    };
    channel.BasicConsume(queue: "PersistenceQueue", autoAck: true, consumer: consumer);
}

3 隐式确认

当 RabbbitMQ 将消息发送给消费者后,消费者端接收到消息后,不等待消息处理结束,立即自动回送一个确认回执。

自动确认的用法十分简单,设置消费方法的参数 autoAck 为 true 即可,我们前边的例子都是使用的自动确认。

channel.BasicConsume(queue: "PersistenceQueue", autoAck: true, consumer: consumer);

4 显式确认

设置消费方法的参数 autoAck 为 false,channel.BasicAck可以一条一条确认后删除,也可使用 channel.BasicReject不删除。

//定义消费者                                      
EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
int i = 0;
//就是Rabbitmq的服务器作为主动方---RabbitMq 推送消息到消费者来的;
consumer.Received += (model, ea) =>
{
    string message = Encoding.UTF8.GetString(ea.Body.ToArray());
    Console.WriteLine($"正常收到消息:{message}");
    if (i < 100)
    {
        Console.WriteLine($"【{message}】消息已经被消费,同时从RabbitMQ服务器删除");
        channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false);
    }
    else
    {
        Console.WriteLine($"【{message}】消息没有被正常消费,可以让消息不要删除");
        channel.BasicReject(deliveryTag: ea.DeliveryTag, requeue: true);
        //throw new Exception("消息消费异常了~");
    }
    i++;
};
//显式确认
channel.BasicConsume(queue: "PersistenceQueue", autoAck: false, consumer: consumer);

5 消息质量

channel.BasicQos可以设置每次从队列中取出几条消息进行消费。

channel.BasicQos(prefetchSize: 0, prefetchCount: 2, global: false);

方法中参数 prefetchSize 为预取的长度,一般设置为0即可,表示长度不限;

prefetchCount 表示预取的条数,即发送的最大消息条数;

global 表示是否在 Connection 中全局设置,true表示 Connetion 下的所有 channel 都设置为这个配置。

标签:消费,ea,确认,RabbitMQ,消息,message,consumer,channel
From: https://www.cnblogs.com/nullcodeworld/p/18669523

相关文章

  • RabbitMQ-消息入队
    1分布式异步的问题对于一个业务线的处理,如果是一个完整的处理,应该是消息正常进入队列,同时消息正常被消费掉。问题来了:生产者发送消息,在传输过程中,消息丢失了,咋办?消息发到RabbitMq队列,RabbitMq宕机了,咋办?消费者在消费消息的时候,消费异常了,咋办?方案思路1、要保证消息一定能......
  • RabbitMQ-死信队列
    死信,就是无法被消费的消息,一般来说生产者将消息投递到broker或者直接到队列里了,消费者从队列取出消息进行消费。但某些时候由于特定的原因导致队列中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有死信队列。死信队列还是队列---只是用来接受特......
  • RabbitMQ-集群
    RabbitMQ集群----主备关系,在运行的时候,如果非主要节点宕机,程序操作不受影响;如果主节点宕机了,程序会中断操作。而Rabbitmq集群,会马上让没有宕机的节点参选,选出新的主要节点。程序重试的时候,会进入到新的节点中执行。历史消息不受影响的。基于Docker构建RabbitMQ集群1.启动......
  • RabbitMQ-优先级队列及消息配置
    优先级队列C#数据类型queue----先进先出RabbitMQ---队列-----默认也是先进先出~~RabbitMQ设置优先级----可以配置让消费顺序,不按照先进先出的默认规则;给定的优先级---最终体现在消费者;优先级越高,消费的时候,就优先消费。就在前面消费案例:设置{"vip1","hello2","wor......
  • 基于SpringBoot的大学生日常消费管理系统
    收藏关注不迷路!!......
  • RabbitMQ 高可用方案:原理、构建与运维全解析
    文章目录前言:1集群方案的原理2RabbitMQ高可用集群相关概念2.1设计集群的目的2.2集群配置方式2.3节点类型3集群架构3.1为什么使用集群3.2集群的特点3.3集群异常处理3.4普通集群模式3.5镜像集群模式前言:在实际生产中,RabbitMQ常以集群方案部署。因选用它......
  • 信息时代的消费者行为变迁与应对策略:基于链动2+1模式、AI智能名片及S2B2C商城小程序的
    摘要:随着信息技术的飞速发展与互联网的全面普及,消费者行为模式正在经历深刻变革。在信息大爆炸的背景下,消费者拥有了前所未有的信息获取能力,他们开始独立思考,追求个性化消费体验,并展现出理性消费的趋势。面对这一变化,企业传统的营销策略面临挑战,亟需寻找新的市场切入点和服务模......
  • Python、R用深度学习神经网络组合预测优化能源消费总量时间序列预测及ARIMA、xgboost
    全文链接:https://tecdat.cn/?p=38726原文出处:拓端数据部落公众号分析师:QingxiaWang在能源领域,精准预测能源消费总量对制定合理能源战略至关重要。当前,能源消费预测分析主要运用单一模型(如灰色预测法、时间序列分析法等)和组合模型两种方式。然而,单一模型存在系统误差较高、预测......
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
    无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型随着人工智能技术的快速发展,越来越多的AI模型被广泛应用于各个领域。然而,运行这些模型通常需要高性能的硬件支持,特别是GPU(图形处理器),这往往导致较高的成本门槛。为了打破这一限制,开源AI项目LocalAI提供了一种......
  • 【CES】消费电子展 各年的主题1967-2025:专注于展示当时的最新技术。人工智能,元宇宙,电
    消费电子展(CES,ConsumerElectronicsShow)的正式举办始于1967年。虽然它在最初几年并没有一个明确的“主题”,但每年的展会确实都有其突出关注的技术方向和创新。直到近年来,CES才开始明确提出具体的年度主题。以下是1967年到2025年期间,CES的一些重要年度发展和技术趋势概述:......