springboot集成kafka

主要分为以下几步:

一、引入依赖

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

二、添加配置

spring:
  kafka:
    producer:
      bootstrap-servers: 127.0.0.1:9092
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      bootstrap-servers: 127.0.0.1:9092
      group-id: aicloud

三、发送消息、消费消息

发送消息需要写一个接口,消费消息只要开启一个监听即可

package com.spring.aicloud.controller;

import cn.hutool.core.util.StrUtil;
import jakarta.annotation.Resource;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/kafka")
public class KafkaController {

    @Resource
    private KafkaTemplate<String,String> template;

    private static final String TOPIC = "aicloud-test-topic";

    /**
     * 发送消息
     * @param msg
     * @return
     */
    @RequestMapping("/send/{msg}")
    public String test(@PathVariable String msg) {
        if (StrUtil.isEmpty(msg)){
            return "msg can not be empty";
        }
        template.send(TOPIC, msg);
        return "kafka test";
    }

    /**
     * 接收消息
     * @param msg
     */
    @KafkaListener(topics = {TOPIC})
    public void listen(String msg) {
        System.out.println("kafka receive: " + msg);
    }

}

四、也可以在页面看到消息。需要注意的是主题要对应上

 五、如何开启手动确认

默认是自动确认的,那消费者的执行业务完成,我们开启手动确认,保证消息能够正常消费完成

1、在配置文件中添加配置

spring:
  kafka:
    listener:
      ack-mode: manual

2、在接口中添加一个参数Acknowledgment 

    /**
     * 接收消息
     * @param msg
     */
    @KafkaListener(topics = {TOPIC})
    public void listen(String msg,  Acknowledgment ack) {
        System.out.println("kafka receive: " + msg);
        ack.acknowledge();  //手动确认
    }

 

posted @ 2025-06-10 21:06  多多指教~  阅读(24)  评论(0)    收藏  举报