使用 Azure 函数处理 Azure 服务总线队列消息
Handling Azure Service Bus Queue messages with Azure function
因此,我们希望在我们的应用程序中卸载一些处理以提供更好的用户体验,同时仍然完成那些繁重的任务,并且找到了使用 Azure 服务总线队列的方法。
我了解如何将数据推送到队列以及消息队列背后的基本思想,但我很难理解的是当它们进来时如何处理它们。只是考虑一下,听起来应该有一些实现方法和 Azure 函数,只要有消息进来就会监听,但是如果没有持续轮询,我该怎么做呢?我知道您可以使用 OnMessage 订阅队列,但这如何与 Azure 函数一起使用?
例如目前我们正在做这样的事情,
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
BrokeredMessage message = new BrokeredMessage();
while ((message = client.Receive(new TimeSpan(hours: 0, minutes: 0, seconds: 30))) != null)
{
Console.WriteLine(string.Format("Message received: {0}, {1}, {2}", message.SequenceNumber, message.Label, message.MessageId));
message.Complete();
Console.WriteLine("Processing message (sleeping...)");
Thread.Sleep(1000);
}
Console.WriteLine("Finished listening Press ENTER to exit program");
Console.ReadLine();
但在这种情况下,我们只是在模拟轮询,对吧?这只是感觉不是一个好的解决方案。我是不是在设计中考虑到这个错误?
Azure ServiceBus 通过将新消息推送到连接的客户端而不是让客户端轮询队列来工作。
使用 ServiceBus API,您可以使用 OnMessage
方法来设置消息泵,但是如果您使用的是 Azure Functions,这一切都可以通过使用服务总线触发器。
您只需将 Azure Function 配置为指向您要侦听的队列。当一条新消息添加到队列中时,您的函数将被触发,并将消息传递给它。
查看服务总线触发器示例:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger-sample
因此,我们希望在我们的应用程序中卸载一些处理以提供更好的用户体验,同时仍然完成那些繁重的任务,并且找到了使用 Azure 服务总线队列的方法。
我了解如何将数据推送到队列以及消息队列背后的基本思想,但我很难理解的是当它们进来时如何处理它们。只是考虑一下,听起来应该有一些实现方法和 Azure 函数,只要有消息进来就会监听,但是如果没有持续轮询,我该怎么做呢?我知道您可以使用 OnMessage 订阅队列,但这如何与 Azure 函数一起使用?
例如目前我们正在做这样的事情,
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
BrokeredMessage message = new BrokeredMessage();
while ((message = client.Receive(new TimeSpan(hours: 0, minutes: 0, seconds: 30))) != null)
{
Console.WriteLine(string.Format("Message received: {0}, {1}, {2}", message.SequenceNumber, message.Label, message.MessageId));
message.Complete();
Console.WriteLine("Processing message (sleeping...)");
Thread.Sleep(1000);
}
Console.WriteLine("Finished listening Press ENTER to exit program");
Console.ReadLine();
但在这种情况下,我们只是在模拟轮询,对吧?这只是感觉不是一个好的解决方案。我是不是在设计中考虑到这个错误?
Azure ServiceBus 通过将新消息推送到连接的客户端而不是让客户端轮询队列来工作。
使用 ServiceBus API,您可以使用 OnMessage
方法来设置消息泵,但是如果您使用的是 Azure Functions,这一切都可以通过使用服务总线触发器。
您只需将 Azure Function 配置为指向您要侦听的队列。当一条新消息添加到队列中时,您的函数将被触发,并将消息传递给它。
查看服务总线触发器示例:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus#trigger-sample