kafka - spring-boot 集成 kafka

73 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

配置:

@Configuration
@EnableConfigurationProperties(KafkaConfigEntity.class)
@EnableKafka
public class KafkaConfig {

    @Bean
    public ProducerFactory<String, String> producerFactory (KafkaConfigEntity kafkaConfigEntity) {
        Map<String, Object> props = producerConfigs(kafkaConfigEntity);
        ProducerFactory<String, String> producerFactory = new DefaultKafkaProducerFactory<>(props);
        return producerFactory;
    }

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

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate (ProducerFactory<String, String> producerFactory) {
        KafkaTemplate<String, String> kafkaTemplate = new KafkaTemplate<>(producerFactory);
        return kafkaTemplate;
    }

    @Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory (KafkaConfigEntity kafkaConfigEntity) {
        ConsumerFactory<String, String> consumerFactory = consumerFactory(kafkaConfigEntity);
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory);
        factory.setConcurrency(3);
        return factory;
    }

    @Bean
    public ConsumerFactory<String, String> consumerFactory (KafkaConfigEntity kafkaConfigEntity) {
        Map<String, Object> props = consumerConfigs(kafkaConfigEntity);
        ConsumerFactory<String, String> consumerFactory = new DefaultKafkaConsumerFactory<>(props);
        return consumerFactory;
    }

    @Bean
    public Map<String, Object> consumerConfigs (KafkaConfigEntity kafkaConfigEntity) {
        String host = kafkaConfigEntity.getHost();
        Map<String, Object> props = new HashMap<>(16);
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, host);
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        return props;
    }
}

发消息:

@Autowired
    KafkaTemplate<String, String> kafkaTemplate;

    @Test
    public void test1 () {
        kafkaTemplate.send("topic1", "hello kafka");
    }

收消息:

 @KafkaListener(id = “1”, topics = "topic1")
    public void listener1 (String data) {
        System.out.println("kafka Receive topic1: " + data);
    }

在这里插入图片描述