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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值