【问题标题】:Can Kafka topic names be parameterised?Kafka主题名称可以参数化吗?
【发布时间】:2020-09-11 18:57:54
【问题描述】:

我最近开始尝试将AsyncAPI 作为工作项目的一部分。我的任务是看看我们是否可以使用 AsyncAPI 生成代码以将测试对象发送到我们现有的 Kafka 队列。我对卡夫卡不熟悉。

我从AsyncAPI playground 的API 规范开始,并尝试从中生成一些Java Spring 代码。但是,我遇到了一个问题,在操场规范中,通道名称(将对应于 Kafka 主题)是参数化的,例如如:

smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured

是否可以通过这种方式对Kafka主题进行参数化,使得生成的服务具有以下注解?

@KafkaListener(topics = "smartylighting.streetlights.1.0.action.{streetlightId}.lighting.measured", groupId = "myGroupId")

或者是否需要更改此规范(同样,我只是用来学习 AsyncAPI)以使主题名称保持不变,而是提供路灯 ID 作为有效负载数据?

提前致谢。

【问题讨论】:

    标签: apache-kafka spring-kafka asyncapi


    【解决方案1】:

    我不熟悉 Async API,但是使用 Spring for Apache Kafka,主题名称可以包含属性占位符

    topics = "foo.${some.property}.bar"
    

    some.property 在 Spring 环境中可用的位置,例如-Dsome.property 命令行或 spring Boot application.properties 或 yaml 文件。

    您还可以使用 Spring 表达式语言执行更高级的配置。

    topics = "#{someBean.somePropeerty}"
    

    【讨论】:

    • @Ben R. 回答你的问题了吗?
    【解决方案2】:

    这是目前java-spring模板的missed features之一。

    不支持主题参数

    请考虑创建一个新问题,详细描述您的案例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2011-12-15
      • 2020-07-27
      • 2018-10-11
      • 2021-03-07
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多