我已经查看了我能找到的文档,并且没有找到答案,所以希望能在这里获得一些启示。这两个电话之间有什么区别吗?
{
"category1": [
[
"http://url1",
"URL 1 Title"
],
[
"http://url2",
"URL 2 Title"
]
],
"category2": [
[
"http://url3",
"URL 3 Title"
]
],
"category3": [
[
"http://url4",
"URL 4 Title"
]
]
}
答案 0 :(得分:0)
首先让我们以任何方式回到Reference Manual:
在4.3版之前,AMQP支持的通道仅支持具有Serializable有效负载和标头的消息。整个消息被转换(序列化)并发送到RabbitMQ。现在,您可以将extract-payload属性(或使用Java配置时的setExtractPayload())设置为true。当此标志为true时,将转换消息有效内容并映射标头,其方式与使用通道适配器时类似。这允许AMQP支持的通道与非可序列化的有效载荷一起使用(可能与另一个消息转换器,如Jackson2JsonMessageConverter)。第11.12节“AMQP消息头”中讨论了默认的映射头。您可以使用outbound-header-mapper和inbound-header-mapper属性提供自定义映射器来修改映射。您现在还可以指定默认传递模式,用于在没有amqp_deliveryMode标头时设置传递模式。默认情况下,Spring AMQP MessageProperties使用PERSISTENT传送模式。
因此,通常(默认情况下)Amqp.channel(connectionFactory)
会将整个Message<?>
发送到目标队列。同时Amqp.outboundAdapter(amqpTemplate)
完全相反 - 将payload
映射到body
和标题:
if (this.amqpTemplate instanceof RabbitTemplate) {
MessageConverter converter = ((RabbitTemplate) this.amqpTemplate).getMessageConverter();
org.springframework.amqp.core.Message amqpMessage = MappingUtils.mapMessage(requestMessage, converter,
getHeaderMapper(), getDefaultDeliveryMode());
addDelayProperty(requestMessage, amqpMessage);
((RabbitTemplate) this.amqpTemplate).send(exchangeName, routingKey, amqpMessage, correlationData);
}
AMQP支持的频道针对persistence
,不应在依赖于消息内容的逻辑中使用。