我正在使用带有队列触发器的Azure Functions。
当函数运行时,它会从Azure队列中删除一个项目。然而,有时我的处理会失败,在这种情况下,我想重新申请该项目,并在以后进行处理。
如何在Azure函数和使用Node中实现这一点。js?
如果有人稍后正在寻找答案,这里有一个使用imago-azure存储包的代码示例:
const { Queues } = require('imago-azure-storage');
const q = new Queues(storageAccount, storageKey);
const QUEUE_NAME = 'testqueue';
(async() => {
// Create the queue if it does not exist yet:
await q.initializeQueues([QUEUE_NAME]);
// Write a sample item to the queue:
await q.put(QUEUE_NAME, { test: 12345 });
// Retrieve up to 10 items, and if any of them fail,
// retry processing them after 3600 seconds:
let items = await q.fetch(QUEUE_NAME, 10, 3600);
for (const { item, message } of items) {
try {
console.log(item);
await doSomeWork(item); // <-- your function here
// Items processed successfully, delete it from queue:
await q.commit(message);
} catch (error) {
// Ignore errors, the item will be requeued automatically
// in 3600 seconds.
}
}
})();
我所做的解决方法是创建一个绑定到触发函数的同一个队列。
[FunctionName("FunctionsQueueTrigger")]
public static async Task Run(
[QueueTrigger("101functionsqueue")] string myQueueItem,
[Queue("101functionsqueue")] IAsyncCollector<string> myQueue)
在我的例子中,如果引发存储异常,代码为412(前提条件失败),我想将该项放回队列。
catch (StorageException ex)
{
if (ex.RequestInformation.HttpStatusCode == (int)System.Net.HttpStatusCode.PreconditionFailed) //412
{
log.LogWarning($"Putting item back to queue due to {ex.Message} error.");
await myQueue.AddAsync(myQueueItem);
}
}
最后,该函数会从队列中删除当前项,但会添加一个具有相同内容的新项。
这可能不是最好的解决方案,但对我来说很有效。
我使用VisualStudio代码创建了一个Azure Service Bus Queue Trigger Python函数,如果代码失败,我希望将消息返回到Service Bus队列。 我找到了一些关于一个名为unlock()和discard()的方法的信息,但我不知道如何实现它。以下是这些文档的链接: 解锁:https://docs.microsoft.com/en-us/azure/serv
本文向大家介绍azure-webjobs 队列触发器,包括了azure-webjobs 队列触发器的使用技巧和注意事项,需要的朋友参考一下 示例 一个简单的示例,定义一个由队列消息触发的功能: 它还支持POCO序列化:
我正在Azure中创建一个函数应用程序,并希望使用队列触发器。我知道如何在设计时配置队列名称,例如: 但是,我希望能够在配置文件中定义和引用它。我知道函数的存在。json(可能是这个),主机。json和本地。设置。json,但我不知道如何在其中设置队列名称并在函数中引用它。 如果我部署在VisualStudio中新创建的函数(使用新的15.3更新),我可以在函数中看到以下内容。部署后的json文件
我们试图在我们的Spring Boot应用程序中使用sping-Rabbit创建一个消息侦听器。但是,如果队列不存在,我们在接收消息期间会遇到问题,应用程序会抛出错误,称为被动声明。 我们想要的是主动声明队列,即如果队列不存在,则应该在mq中声明它。
我有一个Java项目,它使用了一些Azure函数,如HttpTrigger和QueueTrigger。我使用原型来生成这个项目,因此它可以使用HttpTrigger的一些样板代码和它的单元测试,但对QueueTrigger没有任何帮助。我正试图得到帮助,为这个QueueTrigger编写一个好的单元测试,它实际上是从队列中读取消息(弹出)。队列的代码如下所示: 有没有人能推荐一下这个队列触发azu
在.NET core 2.0中使用创建时,我遇到了一个问题。 在体系结构中,当在用于创建用户的队列中创建新消息时,服务必须接收该消息并根据其中的信息在数据库中创建用户。 在Visual Studio2017中,我在下创建了一个新项目。 这种的正确实现是什么?在GitHub上有什么例子吗?提前道谢。