• 两代码的区别


    1,

      var cf = new ConnectionFactory { Uri = Uri, RequestedHeartbeat = 30 };

    while (innerTaskRunning)
                   {
                     using (var conn = cf.CreateConnection())
                       {
                           while (innerTaskRunning)
                           {
                               using (var ch = conn.CreateModel())
                               {
                                   try
                                   {
                                       ch.ExchangeDeclare(ExchangeName, exchangeType, true);
                                       ch.QueueDeclare(QueueName, true, false, false, Args);
                                   }
                                   catch (Exception exBind)
                                   {
                                       WriteLog(logFunc, "绑定队列出错!q=" + QueueName, exBind);
                                       return false; //异常跳出
                                   }


                                   var consumer = new QueueingBasicConsumer(ch);
                                   var consumerTag = ch.BasicConsume(QueueName, true, consumer);

                                   BasicDeliverEventArgs e;
                                   using (new MqWatch("BasicConsume", Uri, ExchangeName, QueueName))
                                   {
                                       e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                                   }
                                   var msg = Encoding.UTF8.GetString(e.Body); //这儿是消息内容
                                   e = null;
                                   try
                                   {

                                       consumeFunc(msg);
                                   }
                                   catch (Exception exConsume)
                                   {
                                       WriteLog(logFunc, "消费出错,msg=" + msg, exConsume);
                                       //add log
                                   }
                               }

                           } //end while
                       }
                   }

     

     

      var cf = new ConnectionFactory { Uri = Uri, RequestedHeartbeat = 30 };

    while (innerTaskRunning)
                   {
                    


                       using (var conn = cf.CreateConnection())
                       {
                              using (var ch = conn.CreateModel())
                               {
                                   try
                                   {
                                       ch.ExchangeDeclare(ExchangeName, exchangeType, true);
                                       ch.QueueDeclare(QueueName, true, false, false, Args);
                                   }
                                   catch (Exception exBind)
                                   {
                                       WriteLog(logFunc, "绑定队列出错!q=" + QueueName, exBind);
                                       return false; //异常跳出
                                   }


                                   var consumer = new QueueingBasicConsumer(ch);
                                   var consumerTag = ch.BasicConsume(QueueName, true, consumer);

                             while (innerTaskRunning)
                           {

                                    BasicDeliverEventArgs e;
                                   using (new MqWatch("BasicConsume", Uri, ExchangeName, QueueName))
                                   {
                                       e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                                   }
                                   var msg = Encoding.UTF8.GetString(e.Body); //这儿是消息内容
                                   e = null;
                                   try
                                   {

                                       consumeFunc(msg);
                                   }
                                   catch (Exception exConsume)
                                   {
                                       WriteLog(logFunc, "消费出错,msg=" + msg, exConsume);
                                       //add log
                                   }
                               }


                           } //end while
                       }
                   }

     

     

    第二段代码内存泄漏的风险。 一直无法释放  BasicDeliverEventArgs  。

    但是第二段代码写起来却是错的。

     

    应用使用BasicGet ACK的方式取得.

  • 相关阅读:
    sklearn使用高斯核SVM显示支持向量
    决策树和随机森林分类
    线性回归曲线和过拟合判断
    wave数据集的回归曲线
    用KNN实现iris的4分类问题&测试精度
    pandas绘制矩阵散点图(scatter_matrix)的方法
    6种字符串数组的java排序 (String array sort)
    Spring中Quartz的配置
    jquery easyui datagrid js获取记录数 页数 当前页
    EasyUI的treegrid组件动态加载数据问题的解决办法
  • 原文地址:https://www.cnblogs.com/zbw911/p/5319025.html
Copyright © 2020-2023  润新知