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);
}
}
Kafka原生监听器 不用注解动态配置
最新推荐文章于 2025-01-13 07:21:31 发布