Каков наилучший подход для копирования сообщений с одной служебной шины на другую? - PullRequest
0 голосов
/ 17 мая 2019

Позвольте мне дать вам немного фона.У меня есть приложение IoT, которое передает данные на служебную шину с фильтрами тем с несколькими подписчиками в среде LIVE, все хорошо.Сейчас я пытаюсь создать тестовую среду, которая полностью отделена.Поскольку данные поступают в LIVE, в идеале мне бы хотелось получить копию всех сообщений, поступающих в эту тестовую среду, чтобы мы могли изолировать среды для группы тестирования.До сих пор были предложены следующие решения: добавить в код соединение второй служебной шины и добавить сообщения как к шине, так и к тестовой.Это требует изменения кода во многих областях приложения и неуклюже.Я ищу более элегантный подход, где я могу скопировать сообщения, поступающие на второй автобус.Первая шина получает копию, а вторая шина также получает копию.Любой совет будет оценен?

1 Ответ

3 голосов
/ 17 мая 2019

Сервисная шина Azure на сегодняшний день не поддерживает перекрестную пересылку пространства имен. Если это будет возможно, вы сможете настроить подписку с автоматической переадресацией в другое пространство имен. А до тех пор вам нужно будет настроить что-то особенное.

До сих пор было предложено следующее решение: добавить в код соединение со второй служебной шиной и добавить сообщения как к шине, так и к тестовой. Это требует изменения кода во многих областях приложения и неуклюже.

В дополнение к этому, оно вводит проблему тестирования в ваше производственное приложение, что кажется неправильным. Подход, который я бы попробовал (обратите внимание, что есть и другие варианты, которые также могут работать), заключался бы в том, чтобы иметь дополнительную подписку сущность и ввести функцию Azure , запускаемую ServiceBusTrigger настроено для объекта подписки, который вы настроите. Функция сможет использовать привязку вывода ServiceBus , настроенную для использования пространства имен тестирования. Преимущества этого подхода:

  1. Ваше производственное приложение не должно меняться.
  2. Вы полностью контролируете, какие сообщения отправляются в тестируемое пространство имен, фильтрующееся по подписке.
  3. Вы можете контролировать поток сообщений в функцию, отключив / включив подписку или удалив ее вместе с функцией.

Вы будете нести дополнительные расходы за выполнение функции.

Псевдокод:

[FunctionName("CloneForTesting")]
[return: ServiceBus(TopicName = "topic", SubscriptionName = "subscription", Connection = "ProductionServiceBusConnection")]
public static string ServiceBusOutput([ServiceBusTrigger(QueueName = "queue", Connection = "TestingServiceBusConnection")] 
Message message, ILogger log)
{
    log.LogInformation($"Cloning message with ID {message.MessageId}");
    return message.Clone();
}
...