在没有 运行 个 cron 作业实例的情况下经常从 Azure 存储队列中出队?
Dequeue from a Azure Storage queue very often without running multiple instances of cron job?
我有一个非常典型的挑战:我有一个要发送 emails/SMS 消息的应用程序。为此,我使用第三方 API(Mandrill 和 GatewayAPI)。这通常很快,但我的一些消息很大,需要一段时间才能发送。这就是为什么我想将它移动到不同的系统。
我的计划是从经常运行(即 15 秒)的 Azure message queue
中进行简单的 Azure Web Job
读取,以确保所有新的通信都以相当快的速度发送。
我的问题是:如果我的作业有时比间隔时间长,是否有问题?如果是这样,我的设计是否有明显的缺陷(即使用消息队列和低间隔的 Web 作业)?
(我希望这不是一个基于意见的问题 - 它真的不是 - 我对如何编程此设置有实际问题)
您需要做的是订阅特定队列的触发器。
这真的很简单。当您基于标准模板创建新的 Azure Web 作业时,您会在 Functions.cs
中获得默认添加的以下函数:
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([QueueTrigger("QUEUENAME")] string message, TextWriter log)
{
// your code
}
然后将代码移到这里,您就不会遇到间隔问题,因为触发器会立即处理它。
我有一个非常典型的挑战:我有一个要发送 emails/SMS 消息的应用程序。为此,我使用第三方 API(Mandrill 和 GatewayAPI)。这通常很快,但我的一些消息很大,需要一段时间才能发送。这就是为什么我想将它移动到不同的系统。
我的计划是从经常运行(即 15 秒)的 Azure message queue
中进行简单的 Azure Web Job
读取,以确保所有新的通信都以相当快的速度发送。
我的问题是:如果我的作业有时比间隔时间长,是否有问题?如果是这样,我的设计是否有明显的缺陷(即使用消息队列和低间隔的 Web 作业)?
(我希望这不是一个基于意见的问题 - 它真的不是 - 我对如何编程此设置有实际问题)
您需要做的是订阅特定队列的触发器。
这真的很简单。当您基于标准模板创建新的 Azure Web 作业时,您会在 Functions.cs
中获得默认添加的以下函数:
// This function will get triggered/executed when a new message is written
// on an Azure Queue called queue.
public static void ProcessQueueMessage([QueueTrigger("QUEUENAME")] string message, TextWriter log)
{
// your code
}
然后将代码移到这里,您就不会遇到间隔问题,因为触发器会立即处理它。