少し背景を説明しましょう。LIVE環境で複数のサブスクライバーを持つトピックフィルターを備えたサービスバスにデータをストリーミングしているIoTアプリがあります。すべてが良好です。今、私は完全に独立したテスト環境を作成しようとしています。データがLIVEにストリーミングされているので、理想的には、このテスト環境に到着するすべてのメッセージのコピーを作成して、テストチームの環境を分離できるようにします。これまでに提案された解決策は、コードに2番目のサービスバス接続を追加し、ライブバスとテストバスの両方にメッセージを追加することです。これには、アプリの多くの領域でコードを変更する必要があり、扱いにくいです。2番目のバスに到着したメッセージをコピーできるよりエレガントなアプローチを探しています。最初のバスはコピーを取得し、2番目のバスもコピーを取得します。
Azure Service Busは、現在、名前空間間の転送をサポートしていません。それが可能であれば、別の名前空間に自動転送するサブスクリプションを設定できます。それまでは、実際に何かカスタムを設定する必要があります。
これまでに提案された解決策は、コードに2番目のサービスバス接続を追加し、ライブバスとテストバスの両方にメッセージを追加することです。これには、アプリの多くの領域でコードを変更する必要があり、扱いにくいです。
それに加えて、それはあなたの本番アプリケーションにテストの懸念をもたらしますが、それは正しくないと感じています。私は(だけでなく仕事ができる他のオプションがあります。注)しようとするだろうなアプローチは、追加のサブスクリプション持っているだろうエンティティをしてご紹介Azureの機能によってトリガServiceBusTrigger
あなたが設定しますサブスクリプションエンティティに設定されています。この関数は、テスト名前空間を使用するように構成されたServiceBus
出力バインディングを利用できます。このアプローチの利点は次のとおりです。
関数の実行には追加のコストが発生します。
疑似コード:
[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();
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加