2

やや関連: NServiceBus エンドポイントが異なるシリアライザーを使用して処理および公開することは可能ですか?

インフラストラクチャにはすでに NServiceBus が広く展開されており、すべて を使用して構成されていXmlSerializerます。ただし、 がXmlSerializer要件を満たさないという 1 回限りの状況が発生したため、JsonSerializerまたはを検討していBinarySerializerます。

インフラストラクチャ全体のすべてのエンドポイントを別のシリアライザーを使用するように変更することは、展開の面で非常に混乱を招き、時間の浪費になりますが、別のシリアライザーを使用する新しいエンドポイントを 1 つ導入する方法を理解するのに苦労しています...というよりはむしろ、代替シリアライザーを使用するようにエンドポイント自体を構成するのは簡単ですが、他のエンドポイントと通信する方法がわかりません。

NServiceBus 3.x を使用している場合、アーキテクチャ全体で使用される 1 つのシリアライザ タイプに固執していませんか? NServiceBus メッセージ ボードで、シリアライゼーションはエンドポイント レベルで定義できることを一度読んだことを覚えているようですが、詳細はあまり与えられておらず、その回答を書いた人は上記の明らかな相互運用の問題を見落としていた可能性があります。

アーキテクチャを次のようにしたい:

+---------+      +------------+ (pub/sub) +------------+
| Web App |----->| Endpoint A |<--------->| Endpoint B |<-------> ...
+---------+      +------------+           +------------+
     |               (XML)                     (XML)
     |
     |           +------------+
     +---------->| Endpoint C |
                 +------------+
                     (JSON)

もちろん、問題は、明らかにエンドポイント C をJsonSerializer排他的に使用するように構成できますが (これで問題ありません)、「Web アプリ」には、いずれかと通信するために独自の (送信専用) バスが必要なことです。エンドポイント A またはエンドポイント C。そして、そのバスは1 つのシリアライザーを使用して構成する必要があります。すでに多数の に基づくエンドポイントにメッセージを送信しているため、XmlSerializer単純に に切り替えることはできませんJsonSerializer。また、メッセージ レベルまたはエンドポイント レベルのいずれかで、NServiceBus にいくつかのメッセージを異なる方法でシリアル化するように指示する構成またはドキュメントを見つけることができた方法はありません。NSB 4/5 での変更が技術的にこれをサポートするかどうかもわかりません。なぜなら、それらはメッセージの送信方法はなく、受信方法に関するものだからです。

これを可能にする構成方法または設定が欠けている場所はありますか? そうでない場合、他にどのような賢明なオプションがありますか? おそらく Web アプリで 2 つのエンドポイントをホストしていますか? それとも、他のシリアライザーに委任するカスタム シリアライザーですか?

4

2 に答える 2

1

NSB パイプラインでトランスポート レベルのメッセージ ミューテーターを使用できる場合があります。処理の後半で変異が発生する場合もありますが、一見の価値があります。それ以外の場合は、すべての異なる形式を処理するために、前述のようにカスタム シリアライザーを実装する必要があります。

もう 1 つの考えは、すべてのエンドポイントでゲートウェイをオンにすることです。これにより、すべてのエンドポイントで HTTP に移行でき、それが解決されることを願っています。繰り返しますが、私はこれを確認していません。いくつかのアイデアを提示しているだけです。

于 2013-04-09T20:54:29.120 に答える