Spring Boot 注解简单集成 Kafka

依赖

Maven

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

配置文件

spring:
  kafka:
    # 地址
    bootstrap-servers: 自己链接的地址,不给这一项时会默认链接本地的 9092端口
    # 消费者配置
    consumer:
      group-id: kafka-demo-kafka-group
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer #关键字的序列化类
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer #值的序列化类
      # 账号密码配置 如果设置了
      properties:
        sasl.mechanism: PLAIN
        security.protocol: SASL_PLAINTEXT
        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="访问用户名" password="访问密码";
    # 生产者配置
    producer:
      group-id: kafka-demo-kafka-group
      key-serializer: org.apache.kafka.common.serialization.StringSerializer #关键字的序列化类
      value-serializer: org.apache.kafka.common.serialization.StringSerializer #值的序列化类
      # 账号密码配置 如果设置了
      properties:
        session.timeout.ms: 15000
        sasl.mechanism: PLAIN
        security.protocol: SASL_PLAINTEXT
        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="访问用户名" password="访问密码";

消费者 (Consumer)

注意文件一定要在spring 扫描的路径下
Slf4j 仅为日志 ,如果不用 lombok 可以去除不要

import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class KafkaConsumer {
    
    

    /**
     * 构建消费者
     * @param consumerRecord 消费记录
     */
    @KafkaListener(topics = {
    
    "kafa_test_topic"})
    public void handleKafkaMessage(ConsumerRecord<String, String> consumerRecord){
    
    
        log.info("receive kafka message: value:{}, 偏移量:{}, partition:{}", consumerRecord.value(),
                consumerRecord.offset(), consumerRecord.partition());

    }

}

生产者(Producer)

使用 kafka 提供的 KafkaTemplate 来完成消息的发送
发送时可以进一步简化入参,具体看send 的重载方法即可,这里提供一种

可能会发现 注入的地方有爆红,但是不用关心,依旧可以正常启动

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class KafkaProducer {
    
    

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    /**
     * 发送kafka消息 使用 KafkaTemplate
     * @param content 发送的内容
     * @return
     */
    public String sendMessage(String content){
    
    
        // 发送的主题
        String topic = "kafa_test_topic";
             // 主题,分区(一般测试只有一个时默认给个0即可),值的key, key对应的发送内容
        kafkaTemplate.send(topic, 0, "key", content);
        return "success";
    }

}

在controller 中的示例调用

@RestController
@RequestMapping("/test")
public class RestRequestTestController {
    
    

    @Autowired
    private KafkaProducer kafkaProducer;

    @GetMapping("/testKafka")
    public Response testKafka(@RequestParam(value = "requestParam")String requestParam){
    
    

        kafkaProducer.sendMessage(requestParam);
        return Response.success(requestParam);
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_44131922/article/details/131289206