zoukankan      html  css  js  c++  java
  • 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             }
  • 相关阅读:
    用变量构造函数检查变量类型
    HTML5的File API读取文件信息
    jQuery插件中的this指的是什么
    了解babel
    了解.gitignore
    高德地图画正六边形
    编写可维护性的js读书笔记
    百度地图遇到的问题
    实用的两个移动端demo
    git基本操作总结
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10398340.html
Copyright © 2011-2022 走看看