Spring Boot 整合 Apache Kafka

前言

由於本文主要簡介 Spring Boot 整合 Apache Kafka,因此默認讀者已經成功安裝並已啓動 Apache Kafka 服務。

正文

添加依賴

在生產者和消費者項目中添加 spring-kafka 依賴,如下:

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

由於筆者的項目用的 Spring Boot 版本爲 2.3.0.RELEASE ,因此 spring-kafka 使用 2.5.x 版本,請注意版本對應,若版本不對應可能會出現諸如 ClassNotFoundException 之類的問題。

spring-kafkaSpring Boot 版本對應可在 Spring for Apache Kafka 頁面查看,下圖是筆者寫此文章時的版本對應關係截圖:

版本對應

生產者配置

在生產者所在項目的 application.yml 文件中添加配置:

spring:
  kafka:
    producer:
      # 指定 kafka 服務器信息;
      bootstrap-servers: 192.168.1.120:9092

說明:

192.168.1.120 爲筆者 kafka 服務所在 IP 地址,讀者需要自行替換爲自己 kafka 服務所在 IP 地址;

9092 爲筆者 kafka 服務端口,讀者需要自行替換爲自己 kafka 服務端口;

若要連接多臺 kafka 服務,可用半角逗號 , 分割多臺 kafka 服務器信息;

發送消息:

@Autowired
private KafkaTemplate kafkaTemplate;

void send() {
    // 發送消息到指定 topic;
    kafkaTemplate.send("test-simple-topic", "消息內容");
}

亦可通過添加回調異步處理消息發送成功、失敗後的邏輯,如下:

// 發送消息到指定 topic;
ListenableFuture sendResult = kafkaTemplate.send("test-simple-topic", "消息內容");
    
// 接收異步回調;
sendResult.addCallback(new ListenableFutureCallback<SendResult<Integer, String>>(){
   
    @Override
    public void onSuccess(SendResult<Integer, String> result) {
        System.out.println("發送成功," + result);
        // TODO: 執行發送成功的操作......
    }

    @Override
    public void onFailure(Throwable ex) {
        System.out.println("發送失敗");
        // TODO: 執行發送失敗的操作......
    }
});

消費者配置

在消費者所在項目的 application.yml 文件中添加配置:

spring:
  kafka:
    consumer:
      # 指定 kafka 服務器信息;
      bootstrap-servers: 192.168.1.120:9092
      # 消費者所在的組;
      group-id: kafka-test
      auto-offset-reset: latest
      enable-auto-commit: true

消費消息:

@Component
public class MessageHandler {
    
    @KafkaListener(topics = {"test-simple-topic"})
    public void handleMessage(String message) {
        System.out.println("開始處理消息......");
        System.out.println(message);
        System.out.println("消息處理完成");
    }

}

說明:

@KafkaListener 可以接收多個參數,可通過在 @KafkaListener 中指定 groupId 值以覆蓋 application.yml 中的 group-id 值;

測試

生產消息

啓動生產者項目,調用 send() 方法;

消費消息

啓動消費者項目,當有新消息時,能看到 handle1(String message) 方法被調用並打印如下信息:

開始處理消息......
1593588193582
消息處理完成

至此,我們已經在 Spring Boot 中簡單地集成了 Apache Kafka,讀者亦可在 此處 查看其他用法。

參考鏈接

《Spring Boot Reference Documentation》: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-kafka

《Spring Kafka 2.5.3.RELEASE API》:https://docs.spring.io/spring-kafka/docs/2.5.3.RELEASE/api/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章