对于最新稳定版本,请使用Spring AMQP 4.0.0spring-doc.cadn.net.cn

回复内容类型

如果你使用了先进的消息转换器,比如内容类型委托消息转换器,你可以通过设置 来控制回复的内容类型回复内容类型听者拥有的财产。 这使得转换器能够为回复选择合适的代理转换器。spring-doc.cadn.net.cn

@RabbitListener(queues = "q1", messageConverter = "delegating",
        replyContentType = "application/json")
public Thing2 listen(Thing1 in) {
    ...
}

默认情况下,为了向后兼容,转换器设置的任何内容类型属性在转换后都会被该值覆盖。 变换器如简易消息转换器使用回复类型而非内容类型来确定所需的转化,并在回复消息中适当设置内容类型。 这可能不是理想的作,可以通过设置converterWinsContentType属性到false. 例如,如果你返回字符串包含 JSON,其中简易消息转换器将回复中的内容类型设置为文本/纯文字. 以下配置将确保内容类型正确设置,即使简易消息转换器被使用。spring-doc.cadn.net.cn

@RabbitListener(queues = "q1", replyContentType = "application/json",
        converterWinsContentType = "false")
public String listen(Thing in) {
    ...
    return someJsonString;
}

这些性质(回复内容类型converterWinsContentType当返回类型为春季AMQP时,不适用消息或者春季消息留言<?>. 第一种情况下,不涉及转换;只需设置内容类型消息属性。 在第二种情况下,行为通过消息头部进行控制:spring-doc.cadn.net.cn

@RabbitListener(queues = "q1", messageConverter = "delegating")
@SendTo("q2")
public Message<String> listen(String in) {
    ...
    return MessageBuilder.withPayload(in.toUpperCase())
            .setHeader(MessageHeaders.CONTENT_TYPE, "application/xml")
            .build();
}

该内容类型将传递在消息属性去转换器。 默认情况下,为了向后兼容,转换器设置的任何内容类型属性在转换后都会被该值覆盖。 如果你想覆盖该行为,也可以设置AmqpHeaders.CONTENT_TYPE_CONVERTER_WINStrue转换器设定的任何值都会被保留。spring-doc.cadn.net.cn