在springboot中配置两个kafka环境

在工作中需要实了这么一个功能,把从正式环境kafka的数据消费出来,然后转发到测试环境kafka。

原理不复杂,只不过一般很少会配两个kafka环境。

特此记录下,以后说不定可以复用。

因为我们在配置文件里一般会有一个默认的kafka,这个配置我们不动,用来消费数据。

同时我们在配置一个测试环境kafka,命令需要区分下,比如叫kafka-test

复制代码
server:
  port: "${SERVER_PORT:8080}"


spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
  application:
    name: {server-name}
  kafka:
       //...旧的kafka配置不变,下面新增一个kafka
  kafka-test:
    bootstrap-servers: "${KAFKA_SERVERS_TEST:kafka:9092}"
    consumer:
      group-id: kafka-forward
      enable-auto-commit: true
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    listener:
      concurrency: "${KAFKA_CONCURRENCY:1}"
复制代码

然后定义一个配置类,将测试环境kafka构建成bean对象,因为我们只需要发送消息,所以可以不配消费的参数

复制代码
@EnableKafka
@Configuration
public class KafkaTestConfig {

    @Value("${spring.kafka-test.bootstrap-servers}")
    private String producerBootstrapServers;


    @Bean
    public Map<String, Object> producerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, producerBootstrapServers);
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return props;
    }

    @Bean
    public ProducerFactory<String, String> producerFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
    }

    /**
     * 自定义的测试环境kafka-template
     *
     * @return
     */
    @Bean(name = "kafkaTemplateTest")
    public KafkaTemplate<String, String> kafkaTemplate() {
        return new KafkaTemplate<>(producerFactory());
    }

}
复制代码

这个时候我们的环境中会有两个kafkaTemplate,所以引用的时候需要指定名称,如下

@Autowired
    @Qualifier("kafkaTemplateTest")
    private KafkaTemplate<String, String> kafkaTemplate;

这样就成功了!

一次性搞定,记录一下!

posted @   Mars.wang  阅读(2046)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2021-11-22 Django Admin管理后台详解15(转)--在Django Admin中过滤外联字段
2021-11-22 Django Admin管理后台详解14(转)--将字段标记为只读
2021-11-22 Django Admin管理后台详解13(转)--在列表视图页面上显示多对多或反向联接字段
2021-11-22 Django Admin管理后台详解12(转)--如何删除模型的“添加”和“删除”按钮
2021-11-22 Django Admin管理后台详解11(转)-覆盖后台模板
2021-11-22 Django Admin管理后台详解10(转)--更改下拉菜单中的ForeignKey显示文本
2021-11-22 Django Admin管理后台详解9(转)--获取特定对象的Django Admin后台URL
点击右上角即可分享
微信分享提示