重复的azure服务总线队列消息

时间:2015-02-13 22:33:57

标签: azure azure-servicebus-queues

我有一个监听Azure Service Bus Queue Messages的Windows服务,以便从我的WebApi应用程序分发处理。我还需要处理重复的任务(每晚/每周),我认为最好使用相同的系统处理。

例如,假设我有一个“CleanupDb”队列,每天午夜删除陈旧的数据库节点:

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

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

    // do DB Cleanup
}, options)

理论上这应该有用,但我觉得我错过了一种更明显的处理方法。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

是的,这可行,但我不推荐这种方法,比如每天开火一次。我看到的问题是:

  • 即使你提供了一个相当健康的退避政策,这仍然可以花费交易或保持连接几乎总是空的队列。我认为这是浪费资源。
  • 如果托管此服务的任何内容发生故障,则不会处理您的操作。
  • 可能会发生异常,这意味着处理消息不会在第二天排入队列。

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