SpringBoot+Kafka示范源码

  • 依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
  • 配置文件 application.yml
spring:
  kafka:
    bootstrap-servers: 192.168.108.129:9092
    producer:
      retries: 0
      batch-size: 16384
      buffer-memory: 33554432
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      properties:
        linger.ms: 1

    consumer:
      enable-auto-commit: true
      auto-commit-interval: 100ms
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      properties:
        session.timeout.ms: 15000

    template:
      default-topic: dealTopic
server:
  port: 80
  • 配置类
    • KafkaTopicProperties
@Configuration
@Component
@ConfigurationProperties("spring.kafka")
public class KafkaTopicProperties implements Serializable {

    private String groupId;
    private String[] topicName;

    public String getGroupId() {
        return groupId;
    }

    public void setGroupId(String groupId) {
        this.groupId = groupId;
    }

    public String[] getTopicName() {
        return topicName;
    }

    public void setTopicName(String[] topicName) {
        this.topicName = topicName;
    }
}
  • KafkaTopicConfiguration
@Configuration
@EnableConfigurationProperties(KafkaTopicProperties.class)
public class KafkaTopicConfiguration {

    private final KafkaTopicProperties properties;

    @Autowired
    public KafkaTopicConfiguration(KafkaTopicProperties kafkaTopicProperties) {
        this.properties = kafkaTopicProperties;
    }

    @Bean
    public String[] kafkaTopicName() {
        return properties.getTopicName();
    }

    @Bean
    public String topicGroupId() {
        return properties.getGroupId();
    }

}
  • 消费者:监听器
@Component
public class KafkaListenerTestTopic {

    /**
     * 监听方式1
     * @param message
     */
    @KafkaListener(topics = {"test_topic1"},groupId = "test_group")
    public void onMessage(String message){
        System.out.println("处理消息 "+message);
    }

    /**
     * 监听方式2
     * @param record
     */
    @KafkaListener(topics = "test_topic2", groupId = "topicGroupId")
    public void processMessage(ConsumerRecord<Integer, String> record) {
        System.out.println("kafka processMessage start");
        System.out.println("processMessage, topic = {}, msg = {}"+ record.topic()+record.value());
        // do something ...
        System.out.println("kafka processMessage end");
    }
}

  • 生产者:发消息
@RestController
@RequestMapping("/kafka")
public class KafkaConsumerTestTopic {

    @Autowired
    private KafkaTemplate<String,Object> kafkaTemplate;

    @PostMapping("/send1")
    public String send1(String topic,String message){
        try {
            kafkaTemplate.send(topic,message);
        }catch (Exception e){
            e.printStackTrace();
            return e.getMessage();
        }
        return "发送成功";
    }

    @PostMapping("/send2")
    public String send2(String topic,String message){
        System.out.println("kafka sendMessage start");
        ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(topic, message);
        future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
            @Override
            public void onSuccess(SendResult<String, Object> stringObjectSendResult) {
                System.out.println("kafka sendMessage success topic = {}, data = {}"+topic+ message);
            }

            @Override
            public void onFailure(Throwable ex) {
                System.out.println("kafka sendMessage error, ex = {}, topic = {}, data = {}"+ex.toString()+ topic+ message);
            }

        });
        System.out.println("kafka sendMessage end");
        return "发送成功";
    }
}
  • 完整pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--导入FastJson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <!--        configuration properties-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

posted @ 2020-11-19 18:47  HumorChen99  阅读(7)  评论(0编辑  收藏  举报  来源