Вы можете использовать метод ReceiveBatch (Int32) для получения сообщений из тематической подписки в пакете. Вы можете получить количество сообщений в подписке на тему, используя метод Getsubscription () менеджера пространства имен.
var namespaceManager = NamespaceManager.CreateFromConnectionString(connnectionString);
var subscriptionDescription = namespaceManager.GetSubscription(topicName, subscriptionName);
var totalMessageCount= subscriptionDescription .MessageCount;
Теперь вы можете вызывать ReceiveBatch (imumMessageCount) внутри цикла и завершать цикл, когда количество полученных сообщений достигает totalMessageCount.
int receivedMessageCount = 0;
List<BrokeredMessage> MessageList = new List<BrokeredMessage>();
do{
var messageList = subClient.ReceiveBatch(100);
receivedMessageCount += messageList.Count;
MessageList.AddRange(messageList);
}while(receivedMessageCount < totalMessageCount);
Теперь в MessageList будут все сообщения в подписке на тему. Вы можете использовать свою собственную логику в списке сообщений для обнаружения дубликатов и переадресовать ее в другую подписку.
Примечание. Чтобы получать все сообщения из ServiceBusTopic, необходимо получать все сообщения от всех подписок на темы в этой теме.