使用 Azure 队列存储为每个队列配置 QueueTrigger
Configure QueueTrigger per queue using Azure queue storage
我有两种不同的场景来使用 Azure 队列存储处理 2 种不同类型的队列。
我想设置一个队列一个接一个运行,另一个队列同时运行。
我一直在查看文档,我可以将配置应用于影响整个队列范围的主机。
static void Main(string[] args)
{
JobHostConfiguration config = new JobHostConfiguration();
config.Queues.BatchSize = 8;
config.Queues.MaxDequeueCount = 4;
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15);
JobHost host = new JobHost(config);
host.RunAndBlock();
}
我可以使用单个 Azure 存储帐户配置这些方案吗?
根据你的问题,我了解到你有 2 个队列,每个队列需要用于处理不同的 tasks/jobs。
您可以遵循这些方法
1) 部署 2 个 Web 作业,每个作业在不同的队列上等待,并在消息出现在各自的队列上时触发相应的作业。您上面提到的配置代码为一项工作奠定了基础。 AFAIK,一项工作可以在一个队列中等待。您可以在 Main()
方法
旁边使用这样的方法
public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage)
{
//do something
}
2) 如果你想根据来自一个队列的消息触发多个场景,你可以在 ProcessQueueMessage
方法上有一个 if else 块,或者如果你想让它更易于管理,使用策略模式来从 ProcessQueueMessage
执行正确的方法
如果您遵循上面的 #1,您将为每个 task/job/scenario 部署不同的 Web 作业。如果您遵循上面的 #2,您将部署一个 Web 作业,每条消息的作用在处理消息时决定。
与等待队列相关的文档here。
[更新]
正如我们所知,一个 Web 作业只能在一个队列上等待,在这种情况下,在队列上等待不是正确的方法。最好定期触发网络作业(比如每 5 分钟一次)。从多个队列中取出消息并处理它们的逻辑将成为一个 Web 作业的一部分。处理每个队列可以是一种方法,该方法被 Web 相同的作业调用(一个接一个或同时使用 Task
)。您可以在 CloudQueue.GetMessages
上为每个队列传递消息计数。它与 windows 服务的作用非常相似。只是触发部分由 Web 作业负责,它作为 Web 作业而不是 windows 服务运行。这是一个粗略的伪代码:
main()
{
// initialize webjob
}
public static MyWebJobMethod(...)
{
Task a = () => {//process queue 1};
Task b = () => {//process queue 2}
Task.WaitAll(a,b);
}
我有两种不同的场景来使用 Azure 队列存储处理 2 种不同类型的队列。
我想设置一个队列一个接一个运行,另一个队列同时运行。
我一直在查看文档,我可以将配置应用于影响整个队列范围的主机。
static void Main(string[] args)
{
JobHostConfiguration config = new JobHostConfiguration();
config.Queues.BatchSize = 8;
config.Queues.MaxDequeueCount = 4;
config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15);
JobHost host = new JobHost(config);
host.RunAndBlock();
}
我可以使用单个 Azure 存储帐户配置这些方案吗?
根据你的问题,我了解到你有 2 个队列,每个队列需要用于处理不同的 tasks/jobs。
您可以遵循这些方法
1) 部署 2 个 Web 作业,每个作业在不同的队列上等待,并在消息出现在各自的队列上时触发相应的作业。您上面提到的配置代码为一项工作奠定了基础。 AFAIK,一项工作可以在一个队列中等待。您可以在 Main()
方法
public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage)
{
//do something
}
2) 如果你想根据来自一个队列的消息触发多个场景,你可以在 ProcessQueueMessage
方法上有一个 if else 块,或者如果你想让它更易于管理,使用策略模式来从 ProcessQueueMessage
如果您遵循上面的 #1,您将为每个 task/job/scenario 部署不同的 Web 作业。如果您遵循上面的 #2,您将部署一个 Web 作业,每条消息的作用在处理消息时决定。
与等待队列相关的文档here。
[更新]
正如我们所知,一个 Web 作业只能在一个队列上等待,在这种情况下,在队列上等待不是正确的方法。最好定期触发网络作业(比如每 5 分钟一次)。从多个队列中取出消息并处理它们的逻辑将成为一个 Web 作业的一部分。处理每个队列可以是一种方法,该方法被 Web 相同的作业调用(一个接一个或同时使用 Task
)。您可以在 CloudQueue.GetMessages
上为每个队列传递消息计数。它与 windows 服务的作用非常相似。只是触发部分由 Web 作业负责,它作为 Web 作业而不是 windows 服务运行。这是一个粗略的伪代码:
main()
{
// initialize webjob
}
public static MyWebJobMethod(...)
{
Task a = () => {//process queue 1};
Task b = () => {//process queue 2}
Task.WaitAll(a,b);
}