【问题标题】:Polling storage queue for messages using console app webjob使用控制台应用程序 webjob 轮询存储队列的消息
【发布时间】:2017-04-12 21:09:51
【问题描述】:

我想使用 .NET Core 将控制台应用程序创建为 WebJob,但 WebJobs SDK 在 .NET Core 中尚不可用。

有人建议我手动处理从 Azure 存储队列读取消息的情况。看起来 WebJobs SDK 所做的只是继续轮询队列。

下面的代码是这样做的基本思路吗?它看起来不是很复杂,但不确定如何更复杂。

static void Main(string[] args)
{
   var runContinuously = true;
   while (runContinuously)
   {
      ReadAndProcessMessage();
      System.Threading.Thread.Sleep(1000);
   };
}

private static void ReadAndProcessMessage()
{
   // Read message
   ReadMessage();

   // Process message and handle the work
   HandleWork();
}

【问题讨论】:

    标签: azure console-application .net-core azure-webjobs


    【解决方案1】:

    这会奏效。我喜欢简单。

    QueueTriggerAttribute 使用随机指数退避算法来帮助最大限度地降低交易成本。如果您想追溯其完成方式的逻辑,从QueueListener 类开始是一个不错的方法。克隆项目,然后跳到 RandomizedExponentialBackoffStrategy 类。

    【讨论】:

    • 感谢您的链接。因此,WebJobs SDK 方法背后的想法是通过使用复杂的算法智能地确定我们应该多久轮询一次队列,而不是将其设置为特定的时间间隔。这有点像固定成本与可变成本的决策——以设定的时间间隔轮询队列将是固定成本的方法,它本质上成本更高。
    • 你明白了。我们特定的网络应用程序是 B2B,太平洋时间下午 6:00 之后我们获得的流量很少。所以我们调高了最大等待时间间隔,因为凌晨 3:00 的需求不多。
    • 有道理。我当时的想法是,花时间重新创建 WebJobs SDK 提供的这个好功能对我来说可能没有多大意义,因为我确信在某个时候,它将被移植到 .NET Core .同时,我可以提出一个简单的逻辑,即在高峰时段每 100 毫秒轮询一次,然后每 2 秒开始轮询。我可以通过观察流量模式来得出这个逻辑。这对我来说实施起来要简单得多,然后重新发明轮子。只是想更好地利用我的时间和精力。
    • 不过,我真的很感谢这个链接。了解事物的内部运作方式非常有用且非常有用。
    猜你喜欢
    • 2018-01-29
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2013-11-07
    相关资源
    最近更新 更多