Kafka——SpringBoot整合Kafka

11 篇文章 1 订阅
6 篇文章 1 订阅

Kafka——SpringBoot整合Kafka


简介

SpringBoot整合Kafka,开启生产者服务并使用Web接口的方式向Kafka集群发送消息,同时开启一个消费者服务作为消息接受消费,模拟Web环境下的消息生产和消费过程

maven配置

添加maven依赖,主要有springboot、spring-kafka整合依赖、springboot-web

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

spring配置

spring配置写在application.yml中,将原来在代码中的配置转移到了配置文件里面,具体配置项的内容在org.springframework.boot.autoconfigure.kafka下KafkaProperties类中。这里选择了几个关键配置属性进行配置,如Kafka集群、生产者和消费者的键、值序列化器和反序列化器

server:
  port: 8081
spring:
  kafka:
    bootstrap-servers: 192.168.108.128:9092,192.168.108.129:9092,192.168.108.130:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      enable-auto-commit: true
      auto-commit-interval: 100

生产者

生产者调用web api接口请求,通过KafkaTemplete类进行发送,在Controller层注入KafkaTemplete,他的泛型即为键和值的类型,这里都用String类型的。生产者发送消息主要有同步发送和异步发送两种方式

@RestController
@Slf4j
@RequestMapping("/producer")
public class KafkaProduerController {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
}

同步发送

同步发送消息通过调用KafkaTemplete的send()方法。由于同步发送不关心是否发送成功,所以调用后不需要返回值

@PostMapping("/sync")
public String sendSync() {
for (int i = 0; i < 20; i++) {
kafkaTemplate.send("spring-kafka-sync", "spring-data-" + i);
}
return Kafka.SUCCESS.getValue();
}

异步发送

异步发送同样是调用KafkaTemplete的send()方法,由于异步发送需要知道消息是否发送成功才进行下一条消息的发送,因此会返回一个ListenableFuture对象,并且给该对象添加回调事件,来对消息发送成功或失败事件进行响应和处理

@PostMapping("/async")
public String sendAsync(){
String topic = "spring-kafka-async";
for (int i = 0; i < 20; i++) {
ListenableFuture<SendResult<String, String>> sendReult = kafkaTemplate.send(topic, "spring-kafka-async-"+i);
sendReult.addCallback(new ListenableFutureCallback<SendResult<String, String>>() {
    @Override
    public void onFailure(Throwable throwable) {
    log.error(topic +"--send failed");
    log.error(throwable.getMessage());
    }

    @Override
    public void onSuccess(SendResult<String, String> stringStringSendResult) {
    log.info(topic+" --send success");
    log.info(topic+" partition: "+ stringStringSendResult.getRecordMetadata().partition());
    log.info(topic+" offset: "+ stringStringSendResult.getRecordMetadata().offset());
    }
    });

    }
return Kafka.SUCCESS.getValue();
}

消费者

消费者通过在方法上加上@KafkaListeners注解来对Kafka中的Topic进行监听,当监听的Topic有消息时便会自动接收到消息

@Component
@Slf4j
public class ConsumerListener {
    @KafkaListeners({
            @KafkaListener(id = "spring-kafka-sync", topics = "spring-kafka-sync"),
            @KafkaListener(id = "spring-kafka-async", topics = "spring-kafka-async")
    })
    public void listen(String info) {
        log.info("consumer receive info: " + info);
    }
}

调用

同步发送

请求地址

  • http://127.0.0.1:8081/producer/sync

控制台
在这里插入图片描述

异步发送

请求地址

  • http://127.0.0.1:8081/producer/async

控制台

在这里插入图片描述

从控制台可以观察到,同步发送全部发送成功才开始依次消费消息;异步发送一边发一边消费,但是发送和消费顺序依然一致。

参考

Kafka——Kafka搭建及问题解决

Kafka——Kafka相关操作

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
KafkaSpring Boot整合是一种常见的开发手段,可以通过导入Spring Boot整合Kafka的starter来实现。你可以在pom.xml文件中添加以下依赖坐标来导入该starter: ``` <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 需要注意的是,直接使用Kafka和使用Spring Boot整合Kafka两种方法虽然原理相同,但在配置、使用和理解上有一些区别。因此,不要混淆这两种方法。例如,在使用Spring Boot整合Kafka时,你可以通过同步监听来实现消息的接收,但这与Kafka本身的ack机制是两个独立的概念。 在完成依赖导入后,你可以创建一个测试类来演示如何使用生产者发送消息。首先,你需要创建一个KafkaTemplate对象,并在测试方法中使用它来发送消息。以下是一个示例代码: ``` @SpringBootTest public class KfKTest { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @Test void pro_test(){ // 构造消息 User user = new User(); user.setName("张三"); user.setAge(20); kafkaTemplate.send("test", user.toString()); } } ``` 在这个示例中,我们使用了@Autowired注解来自动注入KafkaTemplate对象,并在测试方法中通过kafkaTemplate.send方法发送消息到名为"test"的主题。 这就是使用Kafka整合Spring Boot的基本步骤。你可以根据自己的需求进一步扩展和使用Kafka的其他功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot整合Kafka](https://blog.csdn.net/m0_37294838/article/details/127253991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [知识点16--spring boot整合kafka](https://blog.csdn.net/dudadudadd/article/details/125344830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值