什么是将消息从一个服务总线复制到另一台服务总线的最佳方法



让我给您一些背景。我有一个IoT应用程序,该应用程序将数据流到了服务总线上,该服务总线在实时环境中具有多个订户的主题过滤器,一切都很好。现在,我正在尝试创建一个完全分开的测试环境。随着数据流入实时,我理想地,我也可以像所有到达该测试环境的消息的副本一样,因此我们可以隔离测试团队的环境。到目前为止,建议的解决方案是在代码中添加第二个服务总线连接,并将消息添加到现场直播的总线和测试。这需要在应用程序的许多领域进行代码更改,并且很笨拙。我正在寻找一种更优雅的方法,可以在其中复制到第二辆巴士上的消息。第一辆巴士将获得副本,第二辆巴士也将获得副本。有什么建议吗?

Azure服务总线不支持截至今天的交叉名称空间转发。如果可能的话,您将能够自动向另一个名称空间设置订阅。在此之前,您确实需要设置一些自定义的东西。

到目前为止,建议的解决方案是在代码中添加第二个服务总线连接,并将消息添加到现场直播的总线和测试。这需要在应用程序的许多领域进行代码更改,并且很笨拙。

除此之外,它还将测试问题引入您的生产应用程序中,这感觉不正确。我会尝试的一种方法(请注意,还有其他可以使用的选项(是要拥有附加订阅 ENTITY 并介绍由ServiceBusTrigger触发的Azure函数。该功能将能够利用配置为使用测试名称空间的ServiceBus输出绑定。这种方法的好处是:

  1. 您的生产应用程序不必更改。
  2. 您可以完全控制订阅上的测试名称空间vias过滤的消息。
  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();
}

相关内容

最新更新