azure-functions - 从 azure 函数推迟或放弃消息服务总线队列

标签 azure-functions azure-webjobs deferred servicebus azure-servicebus-queues

在我的场景中,我将消息发送到 ServiceBus 队列。我有一个在该队列上触发的天蓝色函数。该函数接收消息,使用其他 API 端点检查状态,如果已处理,我会发送一封电子邮件。但是,当该请求的处理未完成时,我想将消息放入队列中(在将来有一些延迟或预定时间),以便函数再次接收相同的消息并再次检查。顺序对我来说并不重要。

到目前为止我已经尝试过这些方法:

BrokeredMessage.Abandon() - 立即触发该函数 - 不理想的行为 BrokeredMessage.Abandon() 与 ScheduledEnqueueTimeUtc 属性 - 相同的行为

BrokeredMessage.Defer() - 在这里我需要跟踪消息序列号以使用 OnReceive 接收消息 - 不方便(甚至可能在函数内?)

将相同的消息重新发送到队列,并将 ScheduledEnqueueTimeUtc 属性设置为稍后时间 - 为此,我需要再次引用队列客户端并发送消息 - 这种方法可行,但感觉不对(因为我必须完成我收到的实际消息并从函数内发送另一条消息)。

此外,我尝试过使用 WebJobs 和 Azure 存储队列 - 与我在那里遇到的问题几乎相同。

有没有更好的方法来完成这个任务?我也愿意使用其他方法。我不确定我是否可以使用 LogicApp 实现类似的目标?

谢谢 桑杰

最佳答案

我认为你最好的选择是发送一条新消息。为此,请使用输出绑定(bind)并返回具有正确 ScheduledEnqueueTimeUtc 值的 BrokeredMessage 实例。如果您在函数中将其作为 BrokeredMessage 获取,则可以克隆原始消息。您可能需要使用 ICollector 进行此输出绑定(bind),因为您的输出是有条件的。

函数运行时根据函数执行结果调用Complete/Abandon方法本身,因此您无法在函数内部手动执行此操作。也不支持 Defer-Receive 组合。

同样的方法应该适用于存储队列。

关于azure-functions - 从 azure 函数推迟或放弃消息服务总线队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418664/

相关文章:

python - 在 VS Code 和 virtualenv 中使用 Azure Functions 时找不到 Numpy 模块

python - Azure Function Apps 中缺少 DLL

c# - 是否可以使用面向方面的方法通过 Autofac 和 DynamicProxy 登录 Azure 函数

c# - 使用 azure appsettings 读取 azure webjob 中 EventHubTrigger 的连接字符串

testing - 如何测试延迟的 Go 语句?

regex - Azure 媒体播放器播放错误 (0x10600003)

azure-webjobs - 异步时 Azure WebJob 不会正确失败

visual-studio-2013 - 'DefaultConnection-Web.config Connection String' 参数不能为 null 或为空

angular - 如何使用带有 @defer 的异步管道在 Angular 17 中的模板中加载和声明变量

javascript - 有没有办法检查 $.when(...) 中 promise 的各个结果,无论最终状态如何