Kafka原生监听器 不用注解动态配置

package com.ruoyi.web.controller.kafka;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.dataFlow.domain.MqForwardConfig;
import com.ruoyi.dataFlow.mapper.MqForwardConfigMapper;
import com.ruoyi.profession.doman.DeviceLastInfo;
import com.ruoyi.profession.service.imple.TransmitDataServiceImpl;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.beans.factory.annotation.Autowired;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.config.KafkaListenerEndpointRegistry;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import org.springframework.kafka.listener.ContainerProperties;
import org.springframework.kafka.listener.KafkaMessageListenerContainer;
import org.springframework.kafka.listener.MessageListener;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Component
public class KafkaInitializerConfig  {
    @Autowired
    private MqForwardConfigMapper mqForwardConfigMapper;
    @Autowired
  private  KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry;
    @Value("${spring.kafka.bootstrap-servers}")
    private String  kafaBootstrapServers ;

    @Autowired
    private TransmitDataServiceImpl transmitDataService;
          @Bean
          public KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry() {
              List<MqForwardConfig> list = mqForwardConfigMapper.selectALLToRedis();

              for (MqForwardConfig mqForwardConfig : list) {
                  Map<String, Object> config = new HashMap<>();
                  config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafaBootstrapServers); // Kafka服务器地址
                  config.put(ConsumerConfig.GROUP_ID_CONFIG, mqForwardConfig.getConsumerRules()); // 消费者组ID
                  config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); // 键的反序列化器
                  config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); // 值的反序列化器
                  DefaultKafkaConsumerFactory consumerFactory = new DefaultKafkaConsumerFactory<>(config);

                  ContainerProperties containerProperties = new ContainerProperties(mqForwardConfig.getUrl());
                  containerProperties.setMessageListener(
                          (MessageListener<String, String>) data ->
                                //  transmitDataService.transmit(JSONObject.parseObject(data.value(), DeviceLastInfo.class))
                                  System.out.println("键:"+data.key()+ "值 :"+data.value())

                  );

                  KafkaMessageListenerContainer<String, String> kafLinster = kafkaMessageListenerContainer2(consumerFactory, containerProperties);
                  kafLinster.start();
                  kafkaListenerEndpointRegistry.getAllListenerContainers().add(kafLinster);

              }
              return kafkaListenerEndpointRegistry;
          }

    public KafkaMessageListenerContainer<String, String> kafkaMessageListenerContainer2
            (DefaultKafkaConsumerFactory consumerFactory,ContainerProperties containerProperties) {
        return new KafkaMessageListenerContainer(consumerFactory, containerProperties);
    }


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值