0


Spring Cloud Stream集成Kafka

Spring Cloud Stream集成Kafka

Spring Cloud Stream是一个构建消息驱动微服务的框架,抽象了MQ的使用方式, 提供统一的API操作。Spring Cloud Stream通过Binder(绑定器)、inputs/outputs Channel完成应用程序和MQ的解耦。

  • Binder 负责绑定应用程序和MQ中间件,即指定应用程序是和KafKa交互还是和RabbitMQ交互或者和其他的MQ中间件交互
  • inputs/outputs Channel inputs/outputs Channel抽象发布订阅消息的方式,即无论是什么类型的MQ应用程序都通过统一的方式发布订阅消息

我们已经搭建好了Kafka(参考Kafka单节点安装),本文主要介绍一下Spring Cloud Stream与Kafka进行集成实现消息的生产及消费。

项目创建

首先需要创建一个SpringBoot项目,命名为:

spring-integration-kafka

,在配置文件中导入相关的依赖。
项目情况为:

  • 构建工具:Gradle
  • SpringBoot版本:2.7.5
  • SpringBoot依赖管理版本:1.0.15.RELEASE
  • SpringCloud依赖管理版本:2021.0.5

项目依赖

配置文件build.gradle.kts的关键配置项如下:

plugins {
    id("org.springframework.boot") version "2.7.5"
    id("io.spring.dependency-management") version "1.0.15.RELEASE"
}

apply(plugin = "org.springframework.boot")
apply(plugin = "io.spring.dependency-management")
apply(plugin = "java")

extra["springCloudVersion"] = "2021.0.5"

dependencyManagement {
    imports {
        mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}")
    }
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    
    implementation("org.springframework.cloud:spring-cloud-starter-bootstrap")
    implementation("org.springframework.cloud:spring-cloud-starter-stream-kafka")
    
    implementation("io.springfox:springfox-boot-starter:3.0.0")
    implementation("com.github.xiaoymin:swagger-bootstrap-ui:1.9.6")
}

集成配置

定义配置文件

application.yml

,配置文件中主要配置Kafka的地址、以及Spring Colud Stream的Binder和inputs/outputs Channel,其中:kafkaChannel1用于向Kafka发送消息;kafkaChannel2用于消费Kafka的消息。

spring:kafka:bootstrap-servers: wux-labs-vm:9092# 定义Kafka的地址producer:acks:1cloud:stream:binders:kafkaBiner1:# 定义一个Binder,名称随意type: kafka   # Binder的类型是 kafkaenvironment:spring:kafka: ${spring.kafka}# Binder的配置使用前面配置的Kafka的信息default-binder: kafkaBiner1    # 默认Binder,是前面配置的Binder的名称bindings:kafkaChannel1:# 定义一个(作为outputs Channel)通道,名称随意,在代码中使用该通道名称即可binder: kafkaBiner1 # 使用kafkaBiner1destination: KafkaFirstTopic # 定义目标Topic的名称kafkaChannel2:# 定义一个(作为inputs Channel)通道,名称随意,在代码中使用该通道名称即可binder: kafkaBiner1 # 使用kafkaBiner1destination: KafkaFirstTopic # 定义目标Topic的名称group: group0   # 作为消息的消费方,需要指定group

集成生产者

下面开发一个生产者,发送消息需要通过outputs Channel进行,使用

kafkaChannel1

发送消息到Kafka。

importio.swagger.annotations.Api;importio.swagger.annotations.ApiOperation;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.stream.function.StreamBridge;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@Api("生产者接口")@RestController@RequestMapping("/producer")publicclassProducerController{@AutowiredprivateStreamBridge bridge;@ApiOperation("向Kafka发送数据")@PostMapping("/kafka")publicStringsendToKafka(String message){boolean status = bridge.send("kafkaChannel1", message);return"发送消息:"+ message +"=====>"+ status;}}

集成消费者

消费消息需要通过inputs Channel进行,定义一个Processor,指定订阅通道为

kafkaChannel2

,这个通道被用于进行消息消费,需要定义group。

importorg.springframework.cloud.stream.annotation.Input;importorg.springframework.messaging.SubscribableChannel;importorg.springframework.stereotype.Component;@ComponentpublicinterfaceConsumerProcessor{@Input("kafkaChannel2")SubscribableChannelsubscribableChannel();}

启用通道并监听。

importorg.springframework.cloud.stream.annotation.EnableBinding;importorg.springframework.cloud.stream.annotation.StreamListener;@EnableBinding(ConsumerProcessor.class)publicclassConsumerProcessorImpl{@StreamListener("kafkaChannel2")publicvoidkafkaStreamListener(Object message){System.out.println("接收到Kafka消息:"+newString((byte[]) message));}}

集成验证

生产者验证

首先启动一个Kafka自带的消费者,监听

KafkaFirstTopic

在这里插入图片描述

接下来启动SpringBoot项目并发送消息。在消费者那里可以看到接收到的消息。

在这里插入图片描述

消费者验证

前面消息已经发送到了Kafka的Topic了,可以看到控制台直接打印出了监听到的消息。

在这里插入图片描述
至此,Spring Cloud Stream集成Kafka完成。


本文转载自: https://blog.csdn.net/wux_labs/article/details/128382257
版权归原作者 wux_labs 所有, 如有侵权,请联系我们删除。

“Spring Cloud Stream集成Kafka”的评论:

还没有评论