【问题标题】:Azure Function and Service bus - conditionally add a new messageAzure 函数和服务总线 - 有条件地添加新消息
【发布时间】:2021-06-05 19:45:34
【问题描述】:

当我的应用需要发送电子邮件时,它会创建一个 db 条目并将其放入数据库中,然后将一条消息放在由作为 WebJob 运行的 Azure 函数监控的服务总线上。

当 WebJob 进程完成发送电子邮件时,我希望它有条件地在 Service Bus 队列中放置一条新的预定消息 - 实际上,我希望 WebJob 在 5 分钟内被唤醒,以查看是否有电子邮件需要发送的db。

但是如果队列上已经有一条消息需要 WebJob 处理,那么我不想把这个预定的消息放在队列中,我只想完成处理,因为我知道队列正在处理立即再次唤醒 WebJob,所以这次不需要在队列中添加 5 分钟的预定消息,它将在下一次 WebJob 完成后放入队列。

我也在使用 App 中的定时消息,因为将来有时需要发送消息,所以我将定时消息添加到服务总线队列中,以在特定时间唤醒发送者。

我想对队列执行 peekBatch 以查看是否已经有一条消息会导致 WebJob 在 5 分钟过去之前被唤醒。如果有,我想跳过将新消息放入队列,但如果没有,我想将消息添加到队列中。

需要明确的是,此 peekBatch 需要发生在使用“ServiceBusTrigger”的 WebJob 内的 Azure 函数中。

我想不通的是如何访问一些东西来执行 PeekBatch。我找到了examples 如何从 ServiceBusTrigger 函数中发送消息。

【问题讨论】:

    标签: azure azure-functions azureservicebus azure-servicebus-queues


    【解决方案1】:

    MessageReceiver 实例作为服务总线触发器的参数传入。 https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus-trigger?tabs=csharp#usage

    使用此实例,您应该能够在订阅上调用 PeekAsync。

    正如一个侧面的想法,如果您仅将预定消息用于触发检查数据库的功能,我会为自己尝试的一件事是将主要功能重构为服务并设置第二个带有定时器触发器的函数。

    【讨论】:

      猜你喜欢
      • 2017-11-30
      • 2012-08-22
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2022-06-17
      • 2019-01-23
      相关资源
      最近更新 更多