Azure ServiceBus MessageSender类是否可以安全地长期运行?

时间:2019-04-08 21:38:01

标签: c# azure .net-core azureservicebus

我有一个长时间运行的过程,它会唤醒,执行某些任务,并且可能需要通过MessageSender将消息发布到Azure服务总线,也可能不需要。如果我可以使MessageSender为单例,那会稍微简化我的代码,所以我想知道它是否可行。

为明确起见,我希望此过程可能会持续很长时间(至少几小时,可能几天),而不会向服务总线发送任何消息。

超级简化的示例:

public async Task WorkLoop(CancellationToken token)
{
    while (!token.IsCancellationRequested)
    {
        var result = DoWork();
        if (result.shouldPublish)
        {
            var message = buildMessage(result);
            await _messageSender.SendAsync(message);
        }
        await Task.Delay(sleepDuration, token);
    }
}

MessageSender实例长时间(至少几天,可能是几周或几个月)保持活动状态是否会产生后果?

1 个答案:

答案 0 :(得分:3)

根据this guide

  

建议您不要关闭消息传递工厂或排队,   主题和订阅客户端发送消息后,然后   在发送下一条消息时重新创建它们。 [...]您可以放心   将这些客户端对象用于并发异步操作,以及   来自多个线程。