首页 文章

带有headerMode = raw的JSON MessageHeaders

提问于
浏览
2

我有一个Spring Cloud Stream(SCS)Kafka 生产环境 应用程序配置了Sleuth用于跟踪 . 我正在尝试发布需要通过以下方式消费的弹出消息“GenericMessage”(即MessageHeaders有效负载):

  • SCS消费者(谁应该继续自动添加到MessageHeaders的跟踪)

  • 非SCS / Java消费者,他们应该跳过MessageHeaders并处理有效负载 .

使用headerMode = embeddedHeaders(默认值):MessageHeader中的跟踪条目在发布之前由EmbeddedHeaderUtils预先添加到消息中 . 我的非java消费者可以't handle this as EmbeddedHeaderUtils doesn' t序列化为纯JSON,即

?\n invalid-json-headers { payload }

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

我真的只想在创建时发布整个GenericMessage,包括Sleuth添加的跟踪 Span ID,即:

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

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

1 回答

  • 1

    因此,将该消息发布为出站消息的 payload

    return MessageBuilder.withPayload(message).build();
    

    这样,您的消息将被序列化为 payload ,并且您可以在正确的反序列化之后访问所需的标头并将 payload 转换为 Message .

相关问题