Я использую темы Azure Service Bus в производственном приложении. Мое понимание заключается в том, что система гарантирует по крайней мере одну копию сообщения в конце подписки при публикации.Azure Service Bus Тема: Почему возникает дублирование сообщений?
На практике я обычно вижу 1 сообщение, соответствующее публикации. В некоторых вырожденных случаях, хотя я вижу кратные. Например: 1 публикация, соответствующая ~ 20 сообщениям в соответствующей подписке. В настоящее время ничто не поглощает эту подписку, что заставляет меня думать, что это логика публикации.
При каких обстоятельствах сообщения повторяются безудержным образом? Я бы предположил, что сетевые помехи могут вызвать это. Что еще?
Обратите внимание, что логика обработки дубликатов по умолчанию не может справиться с этим. У вас будет несколько сообщений с одним и тем же телом и разными идентификаторами сообщений, которые, как я понимаю, используются для установления «идентичности» сообщения.
EDIT: Моя публикация логика довольно простой и напоминает следующее:
public void PublishSomeId(Guid someId, int eventDelayInMinutes, string componentName)
{
var topicClient = ServiceBusManager.GetTopicClient();
var message = new BrokeredMessage(someId);
message.To = componentName;
message.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddMinutes(eventDelayInMinutes);
topicClient.Send(message);
}
Более подробная информация потребуется для ответа на этот вопрос. Какова ваша публикационная логика? Если вы публикуете одну и ту же полезную нагрузку 20 раз с другим идентификатором, тогда да, у вас будет 20 «копий» события. Как выглядит ваша топология? Без этой информации, отвечающей на это, очень много догадок. –
Я отредактировал вопрос, чтобы добавить образец кода, который очень похож на мою фактическую реализацию. Анекдотически я вижу ~ 20 сообщений с телом 'someId'. С помощью журналов я знаю, что этот метод был вызван только один раз с помощью «someId». –
Действительно, ничего необычного. Какова ваша настройка темы и подходит к этой теме? –