5

私はRabbitMQバインダーでSpring Cloud Streamを使用しています。ペイロードと Java ネイティブのシリアル化ではうまくbyte[]機能しますが、JSON ペイロードで作業する必要があります。

これが私のプロセッサクラスです。

@EnableBinding(Processor.class)
public class MessageProcessor {
    @ServiceActivator(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT)
    public OutputDto handleIncomingMessage(InputDto inputDto) {
        // Run some job.
        return new OutputDto();
    }
}

InputDtoOutputDtoJackson アノテーション付きの POJO です。

  • JSON 変換戦略を構成するにはどうすればよいですか?
  • 受け入れられて処理されるメッセージ ヘッダーはどのように見えるべきですか?
4

1 に答える 1

8

コンシューマーでは、コンテンツ タイプの構成を追加できます。

spring.cloud.stream.bindings.input.content-type: application/x-java-object;type=my.package.InputDto

追加することもできます

spring.cloud.stream.bindings.output.content-type: application/json

送信メッセージのペイロードを強制的に JSON にする (相互運用などのため)。

「入力」と「出力」はバインダー チャネル名 (つまりProcessor、アプリで定義されているもの) であることに注意してください。

これをより簡単に、またはより自動化できる可能性は十分にあると思いますが、Spring Cloud でそれを実現するには、エンジニアリングの努力が必要です。フォローしたい場合は、github に問題があります: https://github.com/spring-cloud/spring-cloud-stream/issues/156

メッセージを手動で Spring Cloud Stream に送信するには、手動でヘッダーを設定できます (ただし、Stream を使用する方が簡単です)。JSON メッセージは、Rabbit 管理 UI では次のようになります。

priority:   0
delivery_mode:  2
headers:    
    contentType:    text/plain
    originalContentType:    application/json
content_type:   text/plain
于 2016-02-21T11:30:43.263 に答える