Spring Cloud Stream消息来自/到JSON转换配置

wst*_*wst 5 json spring-rabbit spring-cloud spring-cloud-stream

我正在使用带有RabbitMQ活页夹的Spring Cloud Stream.它适用于byte[]有效负载和Java本机序列化,但我需要使用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

InputDto并且OutputDto是杰克逊注释的POJO.

  • 如何配置JSON转换策略?
  • 邮件标题应该如何被接受和处理?

Dav*_*yer 8

在您的消费者中,您可以添加内容类型配置,例如

spring.cloud.stream.bindings.input.content-type: application/x-java-object;type=my.package.InputDto
Run Code Online (Sandbox Code Playgroud)

你也可以添加

spring.cloud.stream.bindings.output.content-type: application/json
Run Code Online (Sandbox Code Playgroud)

强制传出消息有效负载为JSON(对于互操作等).

请注意,"输入"和"输出"是活页夹通道名称(即Processor在应用程序中定义).

我认为这很有可能变得更容易或更自动,但是需要一些工程工作才能在Spring Cloud中实现这一目标.github中存在一个问题,如果你想遵循它:https://github.com/spring-cloud/spring-cloud-stream/issues/156.

要手动将消息发送到Spring Cloud Stream,您可以手动设置标题(但使用Stream更容易).在Rabbit管理UI中,JSON消息如下所示:

priority:   0
delivery_mode:  2
headers:    
    contentType:    text/plain
    originalContentType:    application/json
content_type:   text/plain
Run Code Online (Sandbox Code Playgroud)