【问题标题】:How to send only custom Header using spring cloud stream如何使用 Spring Cloud Stream 仅发送自定义 Header
【发布时间】:2020-02-25 04:00:03
【问题描述】:

我必须在 kafka 消息中设置自定义标头,我的 kafka 集群本机支持标头 (1.x.x)。我目前正在使用 springCloudVersion=Finchley.RELEASE。

当我设置属性时

default:
    producer:
      headerMode: none

没有任何标题出现在输出中。

另一方面,如果我正在设置

default:
    producer:
      headerMode: headers

包括contentTypespring_json_header_types 在内的许多标头都出现在标头中,这极大地影响了吞吐量。 Kafka 是一种与语言/框架无关的消息传递机制,我觉得 Spring 应该提供一种仅包含用户提供的标头的方法。是否有任何解决方法可以仅获取 kafka 主题的用户设置标头,同时抑制所有与 Spring Cloud 相关的标头。

【问题讨论】:

    标签: apache-kafka spring-cloud spring-kafka spring-cloud-stream spring-cloud-stream-binder-kafka


    【解决方案1】:

    我已经在 GitHub 上回答了这个问题。在多个地方问同一个问题是浪费您和我们的时间。正如我在那里所说,Stack Overflow 是提问的首选场所。

    这又是答案:

    请使用 Stack Overflow 提问; GitHub 问题用于报告错误或请求新功能。

    您可以在binder configuration 中提供自定义标头映射器。

    spring.cloud.stream.kafka.binder.headerMapperBeanName

    KafkaHeaderMapper 的 bean 名称,用于将 spring-messaging 标头映射到 Kafka 标头和从 Kafka 标头映射。例如,如果您希望在使用 JSON 反序列化标头的 DefaultKafkaHeaderMapper 中自定义受信任的包,请使用它。

    默认:无。

    实现您自己的KafkaHeaderMapper 并将其添加为@Bean 并配置活页夹以使用它。

    编辑

    DefaultKafkaHeaderMapper 有一个属性可以将byte[] 标头转换为String

    /**
     * Set the headers to not perform any conversion on (except {@code String} to
     * {@code byte[]} for outbound). Inbound headers that match will be mapped as
     * {@code byte[]} unless the corresponding boolean in the map value is true,
     * in which case it will be mapped as a String.
     * @param rawMappedHeaders the header names to not convert and
     * @since 2.2.5
     * @see #setCharset(Charset)
     * @see #setMapAllStringsOut(boolean)
     */
    public void setRawMappedHeaders(Map<String, Boolean> rawMappedHeaders) {
    

    【讨论】:

    • 谢谢加里,这就像一个魅力!另一方面,以不同的意图在 SO 和 Github 中发布了问题,以引起 2 个不同用户群的关注。虽然我同意像你这样的一些用户在两个平台上都有重叠。从 SO,我期待一个开发人员的工作。来自 GitHub,我期待更真实的答案或发起对话以使平台更好或潜在的贡献。话虽如此,我应该清楚地表达我的意图。对不起
    • 这是一个公平的观点。当我们在多个地方收到相同的问题时,我们会感到有些厌烦——有些人也在 Gitter 上提问!对于一般问题,我该如何做这个或那个,我们更喜欢 Gitter 来回答简单的问题;当需要代码/配置时,我们更喜欢 SO;使用 GitHub,如果您将其表述得更像。 “增强请求 - 我需要一种机制来更好地控制标头映射”,我不会以同样的方式做出反应,而是会用已经存在的机制来回复。很高兴它对你有用。
    • 一切都很好,加里。感谢您对开源世界的贡献。顺便说一句,我最终扩展了您自己的 DefaultKafkaHeaderMapper 并覆盖了 fromHeaders() 方法
    • 关于如何使用 的 Kafka 标头并转换为 的任何代码示例?
    • 不清楚你的意思,你不应该在 cmets 中就旧答案提出新问题;提出一个新问题并提供更多关于您正在尝试做的事情的详细信息。
    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2019-01-23
    • 2020-12-22
    • 2021-08-14
    • 1970-01-01
    • 2021-08-28
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多