1

Spring XD ストリーム内の 1 つの「フィルター」から次の「フィルター」に渡されるメッセージ ペイロードがカスタム Java クラス インスタンスである場合、その間の「パイプ」がリモート トランスポートである場合、ある種のシリアライゼーション メカニズムが必要になると思います。

  1. この場合、Spring XD ではどのような「シリアライゼーション」/「変換」が利用できますか?
  2. この場合、Java シリアライゼーションは機能しますか? また、カスタム クラスがシリアライズ可能な場合、Spring XD はオブジェクトを自動的にシリアライズ/デシリアライズしますか? それとも、ストリーム定義/モジュール定義でヒントを与える必要がありますか?

ありがとう、サイモン

4

1 に答える 1

3

XD は、リモートトランスポートで Kryo シリアライゼーションを使用します。Java.io.serialization は理論上は機能しますが、ペイロード タイプが java.io.Serializable を実装しているとは想定したくありません。また、個人的には、ペイロードがシリアライズ可能である場合、Kryo よりも Java シリアライゼーションを自動的に選択する利点はないと思います。Java シリアライゼーションは、Spring XD の型変換によってサポートされています。

次のようなストリームを作成できるはずです。

filter1 --outputType=--application/x-java-serialized-object | filter2 --input-type=my.custom.SerializablePayloadType

この場合、タイプ変換は、トランスポートに到達する前に Java シリアライゼーションを使用します。メッセージ バスは、ペイロードがバイト配列であることを検出し、そのまま次のモジュールに直接送信します。バイトを含むメッセージは、コンテンツ タイプ ヘッダーを宣言された outputType に設定し、インバウンド コンバーターが Java シリアライゼーションを使用してデシリアライズできるようにします。

上記では、ペイロードが Serializable を実装する必要があります。また、カスタム ペイロード タイプを Spring XD のクラス パスに含める必要があります。つまり、インストールされた各コンテナーの xd/lib に jar を追加します。

于 2014-11-17T16:23:20.867 に答える