Springboot 整合 kafka(生产者--消费者)

1. pom 文件(主要引入了 spring-kafka 、lombok 、 gson 依赖。)

消费者和生产者导入的是一样的

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

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

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>

    </dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

2. 配置文件 application.properties(生产者、消费者配置一样)

#============== kafka ===================
# 指定kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=127.0.0.1:9092

#=============== provider  =======================

spring.kafka.producer.retries=0
# 每次批量发送消息的数量
spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432

# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer

#=============== consumer  =======================
# 指定默认消费者group id
spring.kafka.consumer.group-id=test-consumer-group

spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=100

# 指定消息key和消息体的编解码方式
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

消息实体类 Message.java

也可以不定义实体类,直接定义要发送的消息

@Data
public class Message {
    private Long id;    //id

    private String msg; //消息

    private Date sendTime;  //时间戳

}

生产者 KafkaSender.java

@Component
@Slf4j
@Controller
public class KafkaSender {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    private Gson gson = new GsonBuilder().create();

    //发送消息方法
    @RequestMapping("send")
    @ResponseBody
    public void send() {
        Message message = new Message();
        message.setId(System.currentTimeMillis());
        message.setMsg(UUID.randomUUID().toString());
        message.setSendTime(new Date());
        log.info("+++++++++++++++++++++  message = {}", gson.toJson(message));
        kafkaTemplate.send("zxf", gson.toJson(message));
        return "success";
    }
}

在这里插入图片描述
在这里插入图片描述

消费者类(新建一个新项目)

@Component
@Slf4j
public class KafkaReceiver {

    @KafkaListener(topics = {"zxf"})
    public void listen(ConsumerRecord<?, ?> record) {

        Optional<?> kafkaMessage = Optional.ofNullable(record.value());

        if (kafkaMessage.isPresent()) {

            Object message = kafkaMessage.get();

            log.info("----------------- record =" + record);
            log.info("------------------ message =" + message);
        }

    }
}

在这里插入图片描述

项目搭建好后,依次启动zookeeper kafka服务,再启动生产者开始发送消息,启动消费者接受消息

  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Spring Boot是一款用于简化Spring应用程序开发的框架,而Kafka是一款高性能的分布式消息系统。在Spring Boot中整合Kafka可以实现多生产者消费者的功能。 首先,我们需要在pom.xml文件中添加Kafka的依赖: ``` <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 接下来,我们需要配置Kafka的相关信息。在application.properties文件中添加Kafka的相关配置项,包括Kafka服务器地址、生产者消费者的配置等。 然后,我们需要创建生产者消费者的类。对于生产者,可以使用KafkaTemplate来发送消息,通过指定Topic名称和消息内容来发送消息: ```java @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } ``` 对于消费者,我们可以使用@KafkaListener注解来订阅指定的Topic,然后通过处理方法来处理接收到的消息: ```java @KafkaListener(topics = "topic-name") public void receiveMessage(String message) { // 处理接收到的消息 } ``` 最后,我们需要在应用程序启动时配置Kafka的相关配置。可以使用@Configuration注解来定义一个配置类,并在类中配置Kafka的相关信息。然后,在应用程序启动时,通过@SpringBootApplication注解来扫描配置类。 通过以上的步骤,我们就可以实现Spring Boot与Kafka整合,并实现多生产者消费者的功能。当有新的消息发送到Kafka的Topic时,消费者将能够接收到并进行相应的处理。 ### 回答2: Spring Boot是一个开源的Java框架,可用于快速开发基于Spring的应用程序。而Kafka是一个分布式的流处理平台,它能够将大量数据流进行高效地处理和传输。 在Spring Boot中整合Kafka,可以实现多生产者和多消费者的功能。首先,在项目的pom.xml文件中添加Kafka相关的依赖,例如: ``` <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 然后,在application.properties文件中配置Kafka的连接信息,包括Kafka的地址、端口等: ``` spring.kafka.bootstrap-servers=localhost:9092 ``` 接下来,创建生产者的代码。在Spring Boot中,可以使用KafkaTemplate来发送消息。例如,通过向topic发送消息: ``` @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String message) { kafkaTemplate.send("topicName", message); } ``` 创建消费者的代码也很简单。在Spring Boot中,可以使用@KafkaListener注解来监听特定的topic,并在接收到消息时执行相应的方法。例如: ``` @KafkaListener(topics = "topicName", groupId = "groupId") public void receiveMessage(String message) { // 处理接收到的消息 } ``` 最后,为了支持多个生产者消费者,可以在配置文件中配置多个topic和groupId。每个生产者消费者可以发送和接收不同的topic消息,并使用不同的groupId进行消费。这样就实现了Spring Boot中多生产者和多消费者整合。 通过以上步骤,我们就可以在Spring Boot中实现Kafka的多生产者和多消费者功能。无论是发送消息还是接收消息,都可以得到很好的扩展和灵活性。 ### 回答3: 在Spring Boot中整合Kafka实现多生产者和多消费者的过程相对简单。首先,我们需要在pom.xml文件中添加Kafka的依赖: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 接下来,我们需要在application.properties或application.yml配置文件中配置Kafka的相关属性,包括Kafka服务器地址、端口、消费者生产者的配置等。 接下来,我们可以创建一个生产者实例来发送消息: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Component; @Component public class KafkaProducer { @Autowired private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } } ``` 通过使用注入的KafkaTemplate实例,我们可以调用send方法来发送消息到指定的主题。 然后,我们可以创建一个消费者实例来接收消息: ```java import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component public class KafkaConsumer { @KafkaListener(topics = "topicName") public void receiveMessage(String message) { System.out.println("Received message: " + message); } } ``` 通过使用@KafkaListener注解来监听指定的主题,当有消息到达时,Kafka会自动调用receiveMessage方法来处理接收到的消息。 如果我们需要使用多个生产者消费者,只需要在相应的类上添加不同的注解和配置即可。 综上所述,通过Spring Boot的Kafka整合,我们可以轻松实现多个生产者和多个消费者之间的消息传递。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值