NServiceBus 特定のメッセージ タイプに対して BinarySerializer を指定しますが、すべてに対してではありません
-
27-09-2019 - |
質問
NServiceBus 2.0 では、特定のメッセージ タイプにシリアライザーを定義できますか?
1 つを除くすべてのメッセージを XmlSerializer を使用してシリアル化したいと考えています。残りの 1 つは、BinarySerializer を使用してシリアル化する必要があります。
NServiceBus 2.0でも可能でしょうか?
解決
シリアライザーはエンドポイントベースで指定されているため、そのエンドポイントを使用するすべてのメッセージは同じシリアライザーを使用すると思います。
ただし、エンドポイント/キューごとに 1 つのメッセージ タイプという暗黙的な NServiceBus の推奨事項に従う場合は、1 つのメッセージ タイプを効果的に分離し、それに別のシリアライザーを使用できます。
しかし、バイナリ シリアル化を必要とする 1 つのメッセージ タイプには何が特別なのでしょうか?
コメントに応じて編集する
の 販売代理店情報 ディストリビューターとのルーティングでこれについて間接的に言及しています。ウディ・ダハン氏も次の記事で頻繁にこのことをアドバイスしています。 NServiceBus ヤフーグループ ただし、検索が不十分なため、リンクを提供するのは困難です。
基本的に、優先度の高いメッセージが優先度の低いメッセージの背後に滞留することを望まないこと、またこれにより、必要に応じて特定のメッセージ処理をスケールアウトするための最大限の柔軟性が得られるという考えがあります。
MsmqTransportConfig では指定できる InputQueue は 1 つだけであるため、キューごとにメッセージ タイプが 1 つあるということは、エンドポイントごとにメッセージ ハンドラーが 1 つしかないことを意味します。
画像をアドレス指定するために、バイト配列を Base64 でエンコードされた文字列としてエンコードすると、画像を XML 形式のメッセージにカプセル化できる場合があります。これは理想的ではありませんが、画像が大きすぎない場合は、1 つのメッセージ タイプに対してわざわざ別のシリアライザーを使用するよりも、これを行う方が簡単な場合があります。
もう 1 つのオプションは、画像データを帯域外でデータベースまたはファイルシステムに保存し、(それぞれ) ID またはパスによって参照することです。
他のヒント
バージョン2では不可能です。ただし、バージョン 5 以降ではパイプラインを使用して実行できます。 http://docs.particular.net/samples/pipeline/multi-serializer/