【问题标题】:Magic v1 not supporting record headers?Magic v1 不支持记录标题?
【发布时间】:2020-02-06 09:35:19
【问题描述】:

我使用 spring-boot (2.2.4)、spring-kafka (2.3.5)、Gradle 和 Kotlin。 我想使用标头来映射类型,但我不明白怎么做...

我看到spring-kafka reference 并写下一段代码:

我的配置:

@Configuration
class KafkaProducerConfig {

fun defaultConfig(): HashMap<String, Any> {
    var config = HashMap<String, Any>()
    config[ProducerConfig.BOOTSTRAP_SERVERS_CONFIG] = "localhost:9092"
    config[ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG] = IntegerSerializer::class.java
    config[ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG] = JsonSerializer::class.java
    config[JsonSerializer.TYPE_MAPPINGS] = "order:${Order::class.java}, client:${Client::class.java}"

    return config
}

@Bean
fun orderTemplate(): KafkaTemplate<Int, Order> {
    val factory = DefaultKafkaProducerFactory<Int, Order>(defaultConfig(),
            IntegerSerializer(),
            JsonSerializer<Order>())
    return KafkaTemplate(factory)
}
}

我发送数据:

@Service
class ProducerService(@Autowired val orderSender: KafkaTemplate<Int, Order> { 

@Scheduled(fixedDelay = 2000)
fun send() {
    orderSender.send("order.t", 1, Order())
}

我收到以下错误:

Magic v1 不支持记录头

请帮帮我。

【问题讨论】:

    标签: spring-kafka


    【解决方案1】:

    这意味着您的 Kafka 代理太旧 (

    JSON 序列化程序(默认情况下)将类型信息添加到记录标头,以便接收系统有一些关于如何反序列化的提示。

    如果您必须使用这样的旧代理,您可以关闭发送标头

    /**
     * Set to false to disable adding type info headers.
     * @param addTypeInfo true to add headers.
     * @since 2.1
     */
    public void setAddTypeInfo(boolean addTypeInfo) {
        this.addTypeInfo = addTypeInfo;
    }
    

    在序列化器上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2015-06-28
      相关资源
      最近更新 更多