Rabbitmq 无法使用MessageProperties将标头设置为AMQP消息
下面的代码显示了我如何将标题和消息类型设置为AMQP消息Rabbitmq 无法使用MessageProperties将标头设置为AMQP消息,rabbitmq,spring-integration,spring-amqp,Rabbitmq,Spring Integration,Spring Amqp,下面的代码显示了我如何将标题和消息类型设置为AMQP消息 MessageProperties properties = new MessageProperties(); properties.setHeader("KEY", "HOUSE"); properties.setContentType(MessageProperties.CONTENT_TYPE_JSON); Message message = new Message("1234567;Branch A;SALES;3
MessageProperties properties = new MessageProperties();
properties.setHeader("KEY", "HOUSE");
properties.setContentType(MessageProperties.CONTENT_TYPE_JSON);
Message message = new Message("1234567;Branch A;SALES;3000.50;Pending approval".getBytes(), properties);
rabbitTemplate.sendAndReceive("", QUEUE_NAME, message);
在队列中发送消息后,Transformer将接收该消息
@Transformer(inputChannel = "inboundChannel", outputChannel = "toutboundChannel")
public Property buildProperty(Message<String> property){
LOGGER.info("message received :: HEADERS: {}, PAYLOAD :{}", property.getHeaders(), property.getPayload());
....
}
这将起作用,您必须正确构建messageproperties
MessageProperties properties = new MessageProperties();
properties.builder()
.contentType(MediaType.APPLICATION_JSON)
//headers here
.headers(Map<String, Object>)
.build();
MessageProperties属性=新的MessageProperties();
properties.builder()
.contentType(MediaType.APPLICATION_JSON)
//标题在这里
.标题(地图)
.build();
MessagePropertiesBuilder
类就是用于此的AmqpInboundChannelAdapter
和AmqpInboundGateway
)仅映射标准AMQP头。这是defaultamqheadermapper
的默认行为。要接受任何用户指定的头,您应该使用选项setRequestHeaderNames(“*”
)将AmqpHeaderMapper
)注入该入站端点。或提供所需自定义标题的完整名称列表contentType=text/plain
:我认为AMQP入站端点和该@Transformer(inputChannel=“inboundChannel”)之间存在某种差异
覆盖从AMQPcontentType
接收的头。因为rabbitmplate
不会这样做,如果您发送消息
而不是任何其他对象。请为消息接收者共享org.springframework.integration
类别的调试日志。当然,我们需要这部分日志,当您将收到消息,直到@Transformer
我正在使用org.springframework.amqp.core.MessageProperties。其中没有builder()或build()方法。如果您正在谈论build..我也尝试了以下代码MessagePropertiesBuilder=MessagePropertiesBuilder.newInstance();builder.setHeader(“KEY”,“HOUSE”);builder.setContentType(MessageProperties.CONTENT\u TYPE\u JSON);MessageProperties properties=builder.build();Message Message=new Message(“1234567;分支机构A;销售;3000.50;待审批“.getBytes(),properties”);结果仍然与上述结果相同。感谢Artem Bilan。这已奏效。即使contentType现在也显示了更改:)非常感谢。
MessageProperties properties = new MessageProperties();
properties.builder()
.contentType(MediaType.APPLICATION_JSON)
//headers here
.headers(Map<String, Object>)
.build();