在springboot中對(duì)kafka進(jìn)行讀寫的示例代碼
springboot對(duì)kafka的client很好的實(shí)現(xiàn)了集成,使用非常方便,本文也實(shí)現(xiàn)了一個(gè)在springboot中實(shí)現(xiàn)操作kafka的demo。
1.POM配置
只需要在dependencies中增加 spring-kafka的配置即可。完整效果如下:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<spring-kafka.version>1.2.2.RELEASE</spring-kafka.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- spring-kafka -->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>${spring-kafka.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka-test</artifactId>
<version>${spring-kafka.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
2.生產(chǎn)者
參數(shù)配置類,其參數(shù)卸載yml文件中,通過@Value注入
package com.dhb.kafka.producer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import java.util.HashMap;
import java.util.Map;
@Configuration
public class SenderConfig {
@Value("${kafka.bootstrap-servers}")
private String bootstrapServers;
@Bean
public Map<String,Object> producerConfigs() {
Map<String,Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,this.bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class);
props.put(ProducerConfig.ACKS_CONFIG,"0");
return props;
}
@Bean
public ProducerFactory<String,String> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}
@Bean
public KafkaTemplate<String,String> kafkaTemplate() {
return new KafkaTemplate<String, String>(producerFactory());
}
@Bean
public Sender sender() {
return new Sender();
}
}
消息發(fā)送類
package com.dhb.kafka.producer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
@Slf4j
public class Sender {
@Autowired
private KafkaTemplate<String,String> kafkaTemplate;
public void send(String topic,String payload) {
log.info("sending payload='{}' to topic='{}'",payload,topic);
this.kafkaTemplate.send(topic,payload);
}
}
3.消費(fèi)者
參數(shù)配置類
package com.dhb.kafka.consumer;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
import org.springframework.kafka.core.ConsumerFactory;
import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
import java.util.HashMap;
import java.util.Map;
@Configuration
@EnableKafka
public class ReceiverConfig {
@Value("${kafka.bootstrap-servers}")
private String bootstrapServers;
public Map<String,Object> consumerConfigs() {
Map<String,Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,StringDeserializer.class);
props.put(ConsumerConfig.GROUP_ID_CONFIG,"helloword");
return props;
}
@Bean
public ConsumerFactory<String,String> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String,String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String,String> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
@Bean
public Receiver receiver() {
return new Receiver();
}
}
消息接受類
package com.dhb.kafka.consumer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import java.util.concurrent.CountDownLatch;
@Slf4j
public class Receiver {
private CountDownLatch latch = new CountDownLatch(1);
public CountDownLatch getLatch() {
return latch;
}
@KafkaListener(topics = "${kafka.topic.helloworld}")
public void receive(String payload) {
log.info("received payload='{}'",payload);
latch.countDown();
}
}
3.web測試類
定義了一個(gè)基于http的web測試接口
package com.dhb.kafka.web;
import com.dhb.kafka.producer.Sender;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
@Slf4j
public class KafkaProducer {
@Autowired
Sender sender;
@RequestMapping(value = "/sender.action", method = RequestMethod.POST)
public void exec(HttpServletRequest request, HttpServletResponse response,String data) throws IOException{
this.sender.send("testtopic",data);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json");
response.getWriter().write("success");
response.getWriter().flush();
response.getWriter().close();
}
}
4.啟動(dòng)類及配置
package com.dhb.kafka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class KafkaApplication {
public static void main(String[] args) {
SpringApplication.run(KafkaApplication.class,args);
}
}
application.yml
kafka: bootstrap-servers: 192.168.162.239:9092 topic: helloworld: testtopic
程序結(jié)構(gòu):

包結(jié)構(gòu)
5.讀寫測試
通過執(zhí)行KafkaApplication的main方法啟動(dòng)程序。然后打開postman進(jìn)行測試:

運(yùn)行后返回success

生產(chǎn)者日志:

消費(fèi)者日志:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA 2021.2 激活教程及啟動(dòng)報(bào)錯(cuò)問題解決方法
這篇文章主要介紹了IDEA 2021.2 啟動(dòng)報(bào)錯(cuò)及激活教程,文章開頭給大家介紹了idea2021最新激活方法,關(guān)于idea2021啟動(dòng)報(bào)錯(cuò)的問題小編也給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
完美解決springboot項(xiàng)目出現(xiàn)”java: 錯(cuò)誤: 無效的源發(fā)行版:17“問題(圖文詳解)
這篇文章主要介紹了完美解決springboot項(xiàng)目出現(xiàn)”java: 錯(cuò)誤: 無效的源發(fā)行版:17“問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法
本文主要介紹了Java 數(shù)據(jù)庫時(shí)間返回前端顯示錯(cuò)誤(差8個(gè)小時(shí))的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
SpringBoot集成Lettuce客戶端操作Redis的實(shí)現(xiàn)
本文主要介紹了SpringBoot集成Lettuce客戶端操作Redis的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
Java實(shí)現(xiàn)將對(duì)象轉(zhuǎn)換為二進(jìn)制流再轉(zhuǎn)為Base64字符串
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)將對(duì)象轉(zhuǎn)換為二進(jìn)制流再轉(zhuǎn)為Base64字符串,本文提供了四種方法,大家可以根據(jù)需要進(jìn)行選擇2025-12-12
Java 中的 Consumer 與 Supplier 接口使用場景與
文章介紹了Java 8中函數(shù)式接口的核心概念,Consumer與Supplier接口使用場景與示例,重點(diǎn)對(duì)比了Consumer(消費(fèi)數(shù)據(jù))與Supplier(供給數(shù)據(jù))的區(qū)別,感興趣的朋友跟隨小編一起看看吧2025-08-08

