Rabbitmq 无法使用MessageProperties将标头设置为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

下面的代码显示了我如何将标题和消息类型设置为AMQP消息

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
    类就是用于此的

  • 默认情况下,Spring Integration AMQP入站端点(
    AmqpInboundChannelAdapter
    AmqpInboundGateway
    )仅映射标准AMQP头。这是
    defaultamqheadermapper
    的默认行为。要接受任何用户指定的头,您应该使用选项
    setRequestHeaderNames(“*”
    )将
    AmqpHeaderMapper
    )注入该入站端点。或提供所需自定义标题的完整名称列表

  • Re
    contentType=text/plain
    :我认为AMQP入站端点和该
    @Transformer(inputChannel=“inboundChannel”)之间存在某种差异
    覆盖从AMQP
    contentType
    接收的头。因为
    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();