2

spring-xd 分散環境のメッセージ ストアとして redis を使用しています。

メッセージヘッダーを以下のように設定していますが、

oufinalTreeMapsg1 = MessageBuilder.withPayload(treeMap).setHeader("columnNames", columnNames).build();

プロセッサで受信したメッセージをチェックしている間、IDとタイムスタンプのみが表示されます

送信中のヘッダー

[Headers={columnNames=abc,def, id=74acf995-ec39-0e1c-a426-c9e27b1d47d6, timestamp=1406784568493}]

受信したヘッダー

[Headers={id=aed8dc5b-5b24-d444-7583-c2da7a21d31c, timestamp=1406784568495}]

ここでは、id とタイムスタンプは異なりますが、ペイロードは同じです。

この問題を解決するために私を助けてください、

前もって感謝します、-ス​​ヨーダ

4

1 に答える 1

3

Redis メッセージ バスは、既定ではカスタム ヘッダーの受け渡しをサポートしていません。ただし、 (xd-dirt jar の) 3 番目<constructor-arg/>にカンマ区切りのリストを追加することで、渡されたものにカスタム ヘッダーを追加できます。redis-bus.xml例えば...

<constructor-arg value="foo, bar" />

...ヘッダーfooとを渡しbarます。

ただし、その場合でも、単純な String 値のみを渡すことができます。

Spring Integration (バスで使用) では、メッセージは不変です。それらが何らかのメディア (redis メッセージ バスなど) を介して転送されると、その内容を含む新しいメッセージが作成されますが、それらのヘッダー (id とタイムスタンプ) は変更されます。

デフォルトでは、すべてのRabbitMessageBusカスタム ヘッダーが渡されます。

アップデート

Redis と kafka には、メッセージ ヘッダーまたはプロパティの概念がありません。

redis および kafka メッセージ バスの実装は、servers.yml のプロパティをサポートして、バス経由で転送されるものにカスタム ヘッダーを追加するようになりました。

デフォルトでは、一部のシステム レベル ヘッダーのみが転送されます。

Application Configuration の下の Redis (および Kafka) を参照headers:servers.ymlてください。

転送する追加の (文字列値) ヘッダー名のコンマ区切りリスト

this (redis の場合) は、これらが文字列値でなければならないと誤って述べていることに注意してください。元々はそうでしたが、json との間で変換できるオブジェクトはすべてヘッダー値に含めることができるようになりました。

さらに、kafka にはrawモードがあり、その場合、ヘッダーはバスを介してまったく伝達されません。これはパフォーマンス上の理由から望ましい場合がありますが、フレームワークがタイプを判別できないため、このモードでは (メッセージ タイプの変換など) をサポートできません。

于 2014-08-01T13:37:04.753 に答える