springcloud - kafka实践

springcloud可以通过KafkaTemplate来发布消息,让后消费者使用来订阅@KafkaListener主题消息。

一、添加依赖和配置

pom.java

 1 <dependencyManagement>
 2     <dependencies>
 3       <dependency>
 4         <groupId>org.springframework.cloud</groupId>
 5         <artifactId>spring-cloud-dependencies</artifactId>
 6         <version>Finchley.SR2</version>
 7         <type>pom</type>
 8         <scope>import</scope>
 9       </dependency>
10     </dependencies>
11   </dependencyManagement>
12 
13   <dependencies>
14     <dependency>
15       <groupId>org.springframework.boot</groupId>
16       <artifactId>spring-boot-starter-web</artifactId>
17     </dependency>
18 
19     <dependency>
20       <groupId>org.springframework.cloud</groupId>
21       <artifactId>spring-cloud-stream-binder-kafka</artifactId>
22     </dependency>
23   </dependencies>

application.yml

 1 # 生成者配置
 2 spring:
 3   kafka:
 4     producer:
 5       key-serializer: org.apache.kafka.common.serialization.StringSerializer
 6       value-serializer: org.apache.kafka.common.serialization.StringSerializer
 7     bootstrap-servers: 192.168.3.100:9092
 8     consumer:
 9       group-id: Mike-1
10       key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
11       value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
12 kafka:
13   topic: Mike

 

二、 生产消息

 1 import org.springframework.beans.factory.annotation.Value;
 2 import org.springframework.kafka.core.KafkaTemplate;
 3 import org.springframework.web.bind.annotation.PostMapping;
 4 import org.springframework.web.bind.annotation.RequestParam;
 5 import org.springframework.web.bind.annotation.RestController;
 6 
 7 /**
 8  * @Classname KafkaProducerController
 9  * @Created by Michael
10  * @Date 2023/7/19
11  * @Description 消息生产者
12  */
13 @RestController
14 public class KafkaProducerController {
15   private final KafkaTemplate<String, String> kafkaTemplate;
16   private String topic;
17 
18   public KafkaProducerController(KafkaTemplate<String, String> kafkaTemplate
19           , @Value("${kafka.topic}") String topic) {
20     this.kafkaTemplate = kafkaTemplate;
21     this.topic = topic;
22   }
23 
24   @PostMapping("message/send") // 这种方式只支持post
25   public boolean sendMessage(@RequestParam String message) {
26     kafkaTemplate.send(topic,message);
27     return true;
28   }
29 }

三、消费消息

 1 import org.springframework.kafka.annotation.KafkaListener;
 2 import org.springframework.stereotype.Component;
 3 
 4 /**
 5  * @Classname KafkaConsumerListener
 6  * @Created by Michael
 7  * @Date 2023/7/19
 8  * @Description 监听消息
 9  */
10 @Component
11 public class KafkaConsumerListener {
12   @KafkaListener(topics={"${kafka.topic}"})
13   public void getMessage(String message) {
14     System.out.println("kafka 消费者监听,接收到消息:" + message);
15   }
16 }

四、测试

通过postman发起请求,控制台查看是否消费到消息

 控制台看到消息已经被消费到

 总结,以上方法只能通过post请求生产消息,后期再分享下如何使用其它方式。另外这种的方法固定使用kafka作为消息中间件,如果想使用其它消息中间件改动很大,其实springcloud提供了更好的解决方案,下一篇文章将会介绍。

posted @ 2023-07-19 13:18  天晴修屋顶  阅读(308)  评论(0编辑  收藏  举报