#c# #azure #.net-core #azureservicebus
#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:
В соответствии с рекомендациями по повышению производительности с использованием обмена сообщениями служебной шины:
Не рекомендуется закрывать фабрики обмена сообщениями или клиенты очередей, тем и подписок после отправки сообщения, а затем повторно создавать их при отправке следующего сообщения. […] Вы можете безопасно использовать эти клиентские объекты для одновременных асинхронных операций и из нескольких потоков.
Комментарии:
1. Это полезно, но не дает точного ответа на вопрос. Я ищу любые потенциальные недостатки использования одного
MessageSender
экземпляра в течение длительного периода времени. Я также добавил уточнение, что я ожидаю, что в моем процессе будут длительные промежутки между отправкой сообщений, если это имеет значение.