分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

RabbitMQ消费端消息的获取方式(.Net Core)

发布时间:2023-09-06 02:33责任编辑:白小东关键词:暂无标签

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(5, 1, true); 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 ????????????}

RabbitMQ消费端消息的获取方式(.Net Core)

原文地址:https://www.cnblogs.com/fanqisoft/p/10398340.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved