5

我正在使用带有 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();
    }
}

InputDto并且OutputDto是带有 Jackson 注释的 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 更容易)。在 Rabbit 管理 UI 中,JSON 消息如下所示:

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