让我给您一些背景知识。我有一个IoT应用程序,它将数据流传输到Service总线,该总线具有LIVE环境中具有多个订户的Topic筛选器,一切都很好。现在,我正在尝试创建一个完全独立的测试环境。当数据流传输到LIVE时,理想情况下,我也希望所有到达此测试环境的消息的副本,因此我们可以为测试团队隔离环境。到目前为止,提出的解决方案是在代码中添加第二条服务总线连接,并将消息添加到实时和测试总线中。这需要在应用程序的许多区域中进行代码更改,而且很笨重。我正在寻找一种更优雅的方法,可以复制第二辆公共汽车上到达的消息。第一条总线获得副本,第二条总线也获得副本。任何建议将不胜感激?
答案 0 :(得分:3)
截至目前,Azure Service Bus不支持跨名称空间转发。如果可能的话,您将能够设置一个带有自动转发到另一个名称空间的订阅。在此之前,您确实需要设置一些自定义项。
到目前为止,提出的解决方案是在代码中添加第二条服务总线连接,并将消息添加到实时总线和测试总线这两个总线上。这需要在应用程序的许多区域中进行代码更改,而且很笨拙。
除此之外,它还会将测试问题引入您的生产应用程序中,这并不适合您。我会尝试的一种方法(请注意,还有其他一些可行的选择也可以使用)是拥有一个额外的订阅实体,并引入一个由Azure Function触发的ServiceBusTrigger
配置为您将设置的订阅实体。该函数将能够利用配置为使用测试名称空间的ServiceBus
output binding。这种方法的好处是:
执行函数将产生一些额外费用。
伪代码:
[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();
}