Apache kafka 如何使用spring cloud stream仅发送自定义头

Apache kafka 如何使用spring cloud stream仅发送自定义头,apache-kafka,spring-cloud,spring-kafka,spring-cloud-stream,spring-cloud-stream-binder-kafka,Apache Kafka,Spring Cloud,Spring Kafka,Spring Cloud Stream,Spring Cloud Stream Binder Kafka,我必须在kafka消息中设置自定义头,我的kafka集群本机支持头(1.x.x)。我目前正在使用springCloudVersion=Finchley.RELEASE 当我设置属性时 default: producer: headerMode: none 输出中没有任何标题 另一方面,如果我正在设置 default: producer: headerMode: headers 许多头文件,包括contentType和spring\u json\u he

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

当我设置属性时

default:
    producer:
      headerMode: none
输出中没有任何标题

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

default:
    producer:
      headerMode: headers

许多头文件,包括
contentType
spring\u json\u header\u types
都出现在头文件中,这极大地影响了吞吐量。Kafka是一种语言/框架无关的消息传递机制,我觉得spring应该提供一种只包含用户提供的头的方法。是否有解决办法,只获取kafka主题的用户集标题,同时抑制所有与spring云相关的标题。

我已经在GitHub上回答了这个问题。在多个地方问同一个问题是浪费你和我们的时间。正如我在那里所说的,堆栈溢出是提问的首选位置

答案又来了:

请使用堆栈溢出来提问;GitHub问题是报告bug或要求提供新功能

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

春天、云彩、溪流、卡夫卡、活页夹、headerMapperBeanName

KafkaHeaderMapper的bean名称,用于将spring消息头映射到Kafka头和从Kafka头映射。例如,如果您希望在DefaultKafkaHeaderMapper中自定义受信任的包,该文件包使用JSON反序列化作为头

默认值:无

实现您自己的
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) {
/**
*将头设置为不在上执行任何转换(除了{@code String}到
*{@code byte[]}用于出站)。匹配的入站标头将映射为
*{@code byte[]}除非映射值中对应的布尔值为true,
*在这种情况下,它将映射为字符串。
*@param rawMappedHeaders将头名称设置为不转换,并且
*@自2.2.5起
*@see#setCharset(Charset)
*@see#setMapAllStringsOut(布尔值)
*/
公共void setRawMappedHeaders(映射rawMappedHeaders){

谢谢Gary,这很有魅力。在另一个方面,我在SO和Github中以不同的意图发布了这个问题,以引起两个不同用户群的注意。虽然我同意像你这样的一些用户在这两个平台上是重叠的。因此,我期待着一位同事的努力。在Github,我期待着更真实的回答,或者发起对话,让平台变得更好,或者成为一个潜在的贡献。话虽如此,我应该把我的意图说清楚。对不起,这是一个公平的观点。当我们在多个地方遇到同样的问题时,我们只是有点恼火——有些人也会在Gitter上提问!对于一般问题,我该怎么做,对于简单的问题,我们更喜欢Gitter;当需要代码/配置时,我们更喜欢GitHub;如果您的措辞更像“增强请求-我需要一种机制来更好地控制头映射”,我不会做出同样的反应,我会用已经存在的机制来回答。很高兴它能为你工作。这一切都很好,Gary。感谢你对开源世界的贡献。顺便说一句,我最终扩展了你自己的DefaultKafkaHeaderMapper,并超越了fromHeaders()方法关于如何使用卡夫卡标题并将其转换为的任何代码示例?不清楚您的意思,您不应该在对旧答案的评论中提出新问题;提出新问题并提供您尝试做什么的更多细节。