此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring AMQP 3.2.0! |
回复 ContentType
如果您使用的是复杂的消息转换器,例如ContentTypeDelegatingMessageConverter
中,您可以通过设置replyContentType
属性。
这允许转换器为回复选择合适的 delegate converter。
@RabbitListener(queues = "q1", messageConverter = "delegating",
replyContentType = "application/json")
public Thing2 listen(Thing1 in) {
...
}
默认情况下,为了向后兼容,转换器设置的任何内容类型属性在转换后都将被此值覆盖。
转换器(如SimpleMessageConverter
使用回复类型而不是内容类型来确定所需的转换,并相应地设置回复消息中的内容类型。
这可能不是所需的作,可以通过设置converterWinsContentType
property 设置为false
.
例如,如果您返回String
包含 JSON,则SimpleMessageConverter
会将回复中的内容类型设置为text/plain
.
以下配置将确保内容类型设置正确,即使SimpleMessageConverter
被使用。
@RabbitListener(queues = "q1", replyContentType = "application/json",
converterWinsContentType = "false")
public String listen(Thing in) {
...
return someJsonString;
}
这些属性 (replyContentType
和converterWinsContentType
) 在返回类型为 Spring AMQP 时不适用Message
或 Spring MessagingMessage<?>
.
在第一种情况下,不涉及转换;只需将contentType
message 属性。
在第二种情况下,使用消息标头控制行为:
@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_WINS
自true
,并且将保留转换器设置的任何值。