9

私は TopicClient からの一連のタイムアウトを扱ってきましたが、オブジェクトの有効期間と破棄に関連している可能性があると思います。

このベスト プラクティス ガイドの状態のTopicClientクラスを使用してMicrosoft.ServiceBus.Messaging読んでいます

メッセージを送信した後、メッセージング ファクトリまたはキュー、トピック、およびサブスクリプション クライアントを閉じて、次のメッセージを送信するときにそれらを再作成しないでください。メッセージング ファクトリを閉じると Service Bus サービスへの接続が削除され、ファクトリの再作成時に新しい接続が確立されます。

これは私を混乱させます - この文書は特に言及していませんTopicClientが、私はそれが当てはまると仮定しています. もしかして、この仮定は間違っているのでしょうか?

接続の再作成を避けるために、TopicClient を静的メンバーに保存することはできますか? これを処理するより良い方法はありますか?代わりに使用する必要がある何らかの接続プーリング メカニズムはありますか?

4

2 に答える 2

11

ドキュメントは、TopicClient のすべての静的メンバーとインスタンス メンバーがスレッドセーフであることを示しています。

"この型の public static (Visual Basic では Shared) メンバーはすべてスレッド セーフです。インスタンス メンバーもスレッド セーフであることが保証されています。"

「キュー、トピック、およびサブスクリプションクライアント」と書かれているため、TopicClientが具体的に含まれているという引用を読みました。私はこれを QueueClient、TopicClient、SubscriptionClient と読みました。

メッセージング サブシステムについては、メッセージング サブシステムと連携するために必要なオブジェクトの有効期間を処理するために使用できるゲートウェイ パターンを使用する傾向があります。あなたの場合、Gateway オブジェクトは TopicClient または MessageSender/Receivers の有効期間を処理します。

より一般的なMessageSenderクラスとMessageReceiverクラスを見たことがありますか? 送信時にこれらのより一般的なオブジェクトを使用するということは、送信を行うクライアント コードがトピックまたはキューに送信しているかどうかを知る必要がないことを意味します。アドレスに送信するだけで問題ありません。

于 2013-04-03T01:28:20.143 に答える