Spring boot 集成 Kafka 详解

449 阅读1分钟

版本对应关系:spring.io/projects/sp…

1. 引入依赖

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

2. 相关配置

server.port=7271
#spring.kafka.bootstrap-servers=192.168.44.161:9093,192.168.44.161:9094,192.168.44.161:9095
spring.kafka.bootstrap-servers=localhost:9092

# producer
spring.kafka.producer.retries=1
spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432
spring.kafka.producer.acks=all
spring.kafka.producer.properties.linger.ms=5
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

# consumer
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=1000
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

3. 消费者

使用注解@KafkaListener监听topic:

@Component
public class ConsumerListener {
    @KafkaListener(topics = "springboottopic", groupId = "springboottopic-group")
    public void onMessage(String msg) {
        System.out.println("----收到消息:" + msg + "----");
    }
}

4. 生产者

注入模板方法KafkaTemplate发送消息。

注意send方法有很多重载方法,异步回调ListenableFuture。

使用Component是为了防止注入容器有同名。或者取名的时候注意一点即可。

@Component(value = "kafkaTest")
public class KafkaProducer {

    @Autowired
    private KafkaTemplate<String, Object> kafkaTemplate;

    public String send(@RequestParam String msg) {
        kafkaTemplate.send("springboottopic", msg);
        return "ok";
    }

}

5. 测试

先启动Application,启动消费者监听,然后运行单元测试类即可。

@SpringBootTest
class KafkaTests {

    @Autowired
    @Qualifier("kafkaTest")
    KafkaProducer producer;

    // 消费者:先启动 kafkaApp
    @Test
    void testSendMsg() {
        long time = System.currentTimeMillis();
        System.out.println("----" + time + ",已经发出----");
        producer.send("penyuyan, " + time);
    }
}

image-20211213102037253

6. 总结

经过了Spring的封装,基于Kafka实现异步通信变得更加简单了,和其他的中间件一样,这样我们就可以更加专注于业务的开发,而不用重复的开发底层组件。

7. 项目地址

Kafka-demo