RabbitMQ消费端消息的获取方式(.Net Core)
1【短链接】:BasicGet(String queue, Boolean autoAck)
通过request的方式独自去获取消息,断开式,一次次获取,如果返回null,则说明队列中没有消息。
隐患:每次获取消息都会创建channel。
优点:最安全的获取方式且性能不算太差。
2【长链接】:
1)、EventingBasicConsumer【订阅式】
使用这种方式消息会全部打入当前消费者中,不管是否启用确认机制。
隐患:①根据消息的长短多少将影响当前消费者的占用资源。
②如果当前消费者挂掉,那么未处理的消息将会丢失。
解决:【QOS + Ack】 服务质量 + 消息确认
即在channel设置好通道使消息一条一条的从队列中打过来,确认一条打一条。
1 //UInt32 prefetchSize, 每次取的长度 2 //UInt16 prefetchCount, 每次取几条 3 //Boolean global 是否对connection通用 4 channel.BasicQos(0, 1, true); //https://www.rabbitmq.com/tutorials/tutorial-two-dotnet.html 5 //使用事件机制获取消息 6 EventingBasicConsumer consumer = new EventingBasicConsumer(channel); 7 consumer.Received += (sender, e) => 8 { 9 Console.WriteLine(Encoding.UTF8.GetString(e.Body)); 10 channel.BasicAck(e.DeliveryTag, false); 11 }; 12 channel.BasicConsume("headersQueue", false, consumer);
2)、QueueingBasicConsumer【死循环】【已过时】
1 QueueingBasicConsumer consumer = new QueueingBasicConsumer(channel); 2 channel.BasicConsume("headersQueue", false, consumer); 3 while (true) 4 { 5 var result = consumer.Queue.Dequeue(); 6 if(result != null) 7 { 8 Console.WriteLine(Encoding.UTF8.GetString(result.Body)); 9 channel.BasicAck(result.DeliveryTag, false); 10 } 11 }
作者:奇
出处:https://www.cnblogs.com/fanqisoft/p/10398340.html
版权:本作品采用「本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。」许可协议进行许可。
如果文章内容对您有所帮助,欢迎赞赏.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!