让我给你一点背景。我有一个IoT应用程序,它把数据流到一个服务总线上,它在现场环境中有多个订阅者的主题过滤器,一切都很好。现在,我正在尝试创建一个完全独立的测试环境。由于数据正在流进现场,理想情况下,我也希望得到到达此Test环境的所有消息的副本,这样我们就可以为测试团队隔离环境。到目前为止,所提出的解决方案是,在代码中添加第二个服务总线连接,并将消息添加到总线上,即实时总线和测试总线。这需要在应用程序的许多方面进行代码更改,而且很笨重。我正在寻找一种更优雅的方法,在那里我可以复制到达第二总线的消息。第一个总线得到一个副本,第二个总线也得到一个副本。有什么建议会很感激吗?
发布于 2019-05-17 04:23:10
截止今天,Azure服务总线不支持跨名称空间转发。如果这是可能的话,您将能够设置一个订阅,自动转发到另一个名称空间。在此之前,您确实需要设置一些定制的东西。
到目前为止,所提出的解决方案是,在代码中添加第二个服务总线连接,并将消息添加到总线上,即实时总线和测试总线。这需要在应用程序的许多方面进行代码更改,而且很笨重。
此外,它还将测试问题引入到您的生产应用程序中,这并不合适。我会尝试的一种方法(注意,还有其他选项也可以使用)是有一个额外的订阅实体,并引入由ServiceBusTrigger触发的Azure函数,将其配置到您将要设置的订阅实体。该函数将能够利用配置为使用测试命名空间的输出绑定。这种办法的好处是:
您将承担一些额外的功能执行成本。
伪码:
[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();
}https://stackoverflow.com/questions/56177692
复制相似问题