当前位置: 首页 > 知识库问答 >
问题:

定期azure服务总线队列消息

蔡理
2023-03-14

我有一个windows服务,它侦听Azure服务总线队列消息,以便从我的WebApi应用程序分发处理。此外,我还需要处理重复性任务(每晚/每周),我认为最好使用相同的系统来处理这些任务。

例如,假设我有一个“CleanupDb”队列,每天午夜删除过时的DB节点:

var client = QueueClient.Create("CleanupDb");
var options = /* ... */

client.OnMessage((message) => {
    client.Send(new BrokeredMessage() {
        ScheduledEnqueueTimeUtc = DateTime.Today.AddDays(1)
    });

    // do DB Cleanup
}, options)

理论上这应该行得通,但我觉得我错过了一个更明显的处理方法。有没有更好的办法?

共有1个答案

顾鸣
2023-03-14

是的,这是可行的,但我不推荐这种方法用于类似每天发射一次的东西。我看到的问题是:

  • 即使您提供了一个相当健康的后退策略,这仍然可能花费事务或保持对几乎总是空的队列的连接。我认为这是浪费资源。
  • 如果托管此服务的任何东西发生故障,那么您的操作将不会被处理。
  • 有可能发生异常,这意味着处理的消息没有放在第二天的队列中。

Thiago在上面的评论中提到运行Azure WebJob是一个选项,我同意这一点。它可以被安排,并且在需要之前不使用任何其他资源。另一个选择,特别是如果你还没有托管Azure网站,是查看Azure Automation,它的每日日程安排应该可以正常工作(只需了解长时间运行的任务可能会暂停,因此作为Azure WebJob可能会更好地工作)。

 类似资料:
  • 我知道有一种方法可以确定Azure队列(商店帐户)中的邮件数量(或近似数量);但是,有没有办法查询Azure服务总线队列上挂起的消息数?

  • 我正在使用Azure服务总线队列。但是我不能使用“获取所有队列消息(peek Lock):微软内置于api”从队列中获取所有消息。 有没有办法获取所有队列消息? {"$连接":{"值":{"servicebus_1":{"连接ID":"/订阅/c776fex3-6aec-4722-b099-b054c267b240/资源组/Plugin-Resources/提供者/Microsoft.网络/连接/

  • 我正在使用azure服务总线主题和订阅机制,并希望处理所有在死信队列中的消息。 此外,我想通过C#中的Azure Web作业处理消息,并将其发送回队列。所以我想知道如何通过我的应用程序处理死信队列上的消息?

  • 我有一个服务总线Q,从Azure门户可以或多或少地看到服务总线Q包含多少条目。如何使用他们的管理API获取此计数?我仔细阅读了文档,但没有找到答案。

  • > 在Azure Service Bus主题中,我有两个订阅subscription1和subscription2。我正在向主题发送一条消息。在subscription1中,消息被放弃,在subscription2中,消息被处理。subscription1中的已放弃消息是否将再次发送给两个订阅或仅发送给已放弃消息的订阅。 我也有点困惑,死信队列将是所有订阅都通用的,还是每个订阅都有一个单独的死信队

  • 我已经创建了一个简单的窗口服务来使用来自Azure服务总线队列的消息。我使用TopShelch创建windows服务。下面的代码从这里剪切如下示例:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues 高频。Run(); ServiceBusHe