【问题标题】:Multiple KafkaListener / One topic多个 KafkaListener / 一个主题
【发布时间】:2020-01-24 17:35:34
【问题描述】:

我正在使用 spring-kafka 2.2.12,我才刚刚开始。

我想通过 kafka 管理业务实体的创建/更新。如果可能,在同一主题中,保证顺序(通过提供业务密钥)。由于这不是相同的 java 类型(创建和请求),我想我需要有 2 个 KafkaListener(带有他们自己的 ContainerFactory / JsonDeserializer)。也许我错了?

所以我的问题是:是否有可能有不同的 KafkaListener(因为反序列化)消耗相同的主题(以保持消息的顺序)?

也许我没有以正确的方式接近主题......我没有设法在一个 KafkaListener 中使用不同的对象类型。

谢谢。

【问题讨论】:

  • 如果可以使用不同的类型,我可以使用 JsonDeserializer 吗?!

标签: kafka-consumer-api spring-kafka


【解决方案1】:

如果生产者也是Spring,并且使用JsonSerializer;它将在标题中添加类型信息(默认情况下),JsonDeserializer 使用它来创建目标对象。

如果类型不同(源和目标),但从 JSON 角度来看是类型兼容的,您可以将类型映射信息添加到反序列化器。

如果源不是Spring也可以使用类型映射(但可以修改设置类型信息头)。

the documentation

您还可以使用Delegating serializer/deserializer 根据某些标头调用不同的实现。

【讨论】:

  • 感谢您的回复。是的,制作人也是Spring。但是我需要为 JsonDeserializer 的构造函数提供一个类。这是我不明白的重点。就我而言,我想要一个 JsonDeserializer,能够反序列化不同的类型。 JsonDeserializer 似乎是必需的类型..
  • >But I need to provide a class to the constructor of JsonDeserializer. 仅当生产者不是 Spring 时;默认情况下,反序列化器将使用类型标头,并且仅在没有标头时回退到使用提供的类。请参阅setUseTypeHeaders()(默认为 true)。
  • 我专注于构造函数 DefaultKafkaConsumerFactory(config, Serializer, Deserializer)...我没有看到 DefaultKafkaConsumerFactory(config)。完美的。谢谢你。
  • 我看到你是新来的。请参阅stackoverflow.com/help/someone-answers - 接受答案可能会帮助其他人寻找解决方案。
  • 另一种想法,如果我不提供任何反序列化器,我的 json 反序列化失败,因为我的类不在受信任的包中。 addTrustedPackage 方法仅存在于 JsonDeserializer 中......但我的目标是不实例化这个,因为我不知道目标类。我该怎么办?
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 2022-06-14
  • 2019-06-10
  • 2017-12-22
  • 2020-06-17
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
相关资源
最近更新 更多