此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0spring-doc.cadn.net.cn

回复 ContentType

如果您使用的是复杂的消息转换器,例如ContentTypeDelegatingMessageConverter中,您可以通过设置replyContentType属性。 这允许转换器为回复选择合适的 delegate converter。spring-doc.cadn.net.cn

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

默认情况下,为了向后兼容,转换器设置的任何内容类型属性在转换后都将被此值覆盖。 转换器(如SimpleMessageConverter使用回复类型而不是内容类型来确定所需的转换,并相应地设置回复消息中的内容类型。 这可能不是所需的作,可以通过设置converterWinsContentTypeproperty 设置为false. 例如,如果您返回String包含 JSON,则SimpleMessageConverter会将回复中的内容类型设置为text/plain. 以下配置将确保内容类型设置正确,即使SimpleMessageConverter被使用。spring-doc.cadn.net.cn

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

这些属性 (replyContentTypeconverterWinsContentType) 在返回类型为 Spring AMQP 时不适用Message或 Spring MessagingMessage<?>. 在第一种情况下,不涉及转换;只需将contentTypemessage 属性。 在第二种情况下,使用消息标头控制行为: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();
}

此内容类型将在MessageProperties到转换器。 默认情况下,为了向后兼容,转换器设置的任何内容类型属性在转换后都将被此值覆盖。 如果您希望覆盖该行为,还可以设置AmqpHeaders.CONTENT_TYPE_CONVERTER_WINStrue,并且将保留转换器设置的任何值。spring-doc.cadn.net.cn