带有headerMode = raw的JSON MessageHeaders

时间:2017-08-17 19:32:19

标签: spring-cloud-stream spring-kafka spring-cloud-sleuth

我有一个Spring Cloud Stream(SCS)Kafka制作app,配置了Sleuth用于跟踪。我试图发布一个Spring-messaging' GenericMessage' (即MessageHeaders +有效载荷)需要通过以下方式消费:

  • SCS消费者(谁应该继续自动添加到MessageHeaders的跟踪)
  • 非SCS / Java消费者,他们应该跳过MessageHeaders并处理有效负载。

使用headerMode = embeddedHeaders(默认值): MessageHeader中的跟踪条目在发布之前由EmbeddedHeaderUtils预先添加到消息中。我的非Java消费者无法解决这个问题,因为EmbeddedHeaderUtils没有序列化为纯JSON,即

?\n invalid-json-headers { payload }

使用headerMode = raw: 根本不发送MessageHeaders,只有有效负载被序​​列化。 即 { payload }

我真的只想在创建时发布整个GenericMessage,包括Sleuth添加的trace + span ID,即:

{"headers": {"id": "x", "trace": "y", "span": "z"}, "payload": { ... }}

除了为SCS消费者发布一个主题,还有另一个主题只有有效负载后,有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

因此,将该消息发布为出站消息的antho@noctil: ~/.l/bin$ pwd /home/antho/.local/bin antho@noctil: ~/.l/bin$ ls pip* pip pip2 pip2.7 pip3 pip3.5

payload

通过这种方式,您的邮件将被序列化为return MessageBuilder.withPayload(message).build(); ,并且您可以在正确反序列化并将payload投射到payload后访问所需的标头。