【Kafka】spring-kafka 简单demo实现

概述

Kafka 是现今比较流行的一个异步消息队列处理中间件,经过多年来的发展和完善,已经相对比较成熟,对于大量消息数据的具有较高的性能支持。在 SpringBoot 项目中,常用的 kafka 实现主要有两种方式:一种是 SpringBoot 提供的 spring-kafka,另一种的 Apache 提供的 kafka-clients。对于 SpringBoot 项目,一般都推荐使用 spring-kafka。

Spring-kafka 项目实际上在其内部封装了 Apache 的 kafka-client,便于在 Spring 项目中快速继承 kafka。除了基本的消息队列处理外,spring-kafka 还提供了其他功能,详情可以参考项目源码:

https://github.com/spring-projects/spring-kafka

接入服务demo

首先引入 spring-kafka 的 maven 依赖:

<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

紧接着添加 kafka 服务器配置(这里默认本地启动了一个 kafka 服务):

kafka.servers=127.0.0.1:9092

由于其他配置都存在默认初始化配置,因此我们可以只配置一个简单的生产者模板,然后直接写一个简单的 Controller 接口调用 kafka 发送服务:

@Configuration
@EnableKafka
public class DemoKafkaProducerConfig {
    
    @Value("${kafka.servers}")
    private String servers;
    
    @Bean
    public KafkaTemplate<String, Object> producerTemplate() {
        return new KafkaTemplate<>(producerTemplateFactory());
    }
    
    private ProducerFactory<String, Object> producerTemplateFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
    }
    
    private Map<String, Object> producerConfigs() {
         Map<String, Object> props = new HashMap<>(4);
        // kafka 服务器地址
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, servers);
        // 消息序列化类型
        props.put(ConsumerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        props.put(ConsumerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        
        return props;
    }
}
@RestController
public class KafkaController {

	private final Logger logger = LoggerFactory.getLogger(KafkaController.class);

	@Autowired
	private KafkaTemplate<Object, Object> template;

	@GetMapping("/kafka/send_demo")
	public void sendDemo(String input) {
		this.template.send("demo_topic", input);
	}
    
	@KafkaListener(id = "demo_group_id", topics = "demo_topic")
	public void consume(String msg) {
		logger.info("Consume message is: {}" , msg);
	}
}

最后,就是在启动类前面加上 @EnableKafka 这个注解启动 kafka 服务,然后运行项目即可。

@EnableKafka
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class. args);
    }
}

你可能感兴趣的:(Kafka,kafka,spring,java)