Loading

SpringBoot整合Kafka

1、首先需要在pom文件中引入kafka的依赖

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

2、在application.yml里输入kafka相关配置

# 应用服务 WEB 访问端口
server:
  port: 8080

# 应用名称
spring:
  application:
    name: kafka-springboot-demo
  kafka:
    bootstrap-servers: 192.168.75.100:9092,192.168.75.110:9092,192.168.75.120:9092
    producer: # 生产者
      retries: 3 # 设置大于0的值,则客户端会将发送失败的记录重新发生
      batch-size: 16384
      buffer-memory: 33554432
      acks: 1
      key-serializer: org.apache.kafka.common.serialization.StringSerializer # 指定消息key和消息体的编码方式
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer: # 消费者
      group-id: default-group
      enable-auto-commit: false
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      max-poll-records: 500
    listener:
      ack-mode: manual_immediate

3、编写controller,用此控制器往主题里发送消息

package com.bitzh.kafka.springboot.controller;

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/msg")
public class MyKafkaController {

    private final String TOPIC_NAME = "my-replicated-topic";

    @Resource
    private KafkaTemplate<String,String> kafkaTemplate;

    @RequestMapping("/send")
    public String sendMessage(){
        kafkaTemplate.send(TOPIC_NAME,0,"key","this is a message!");
        return "send success!";
    }

}

4、编写消费者,此消费者将监控@KafkaListener注解里配置的主题,持续获取最新的消息

package com.bitzh.kafka.springboot.consumer;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.stereotype.Component;

@Component
public class MyConsumer {

    @KafkaListener(topics = "my-replicated-topic",groupId = "MyGroup1")
    public void listenGroup(ConsumerRecord<String,String> record, Acknowledgment ack){
        String value = record.value();
        System.out.println(value);
        System.out.println(record);
        //手动提交offset
        ack.acknowledge();
    }
}

5、前面几个步骤都完成后,便可以启动项目

6、打开浏览器,访问http://localhost:8080/msg/send

7、我们看到后台的控制台打印出刚才通过controller往主题里发送的消息,说明消费者已经成功订阅到了主题中的消息啦!

posted @ 2022-01-12 20:46  爱睡懒觉的我  阅读(325)  评论(0)    收藏  举报