前言
由於本文主要簡介 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-kafka
與 Spring 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/