springboot + apache kafka[2] 简单的接收消息
在本地开启 zookeeper 和 kafka server
.\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
.\bin\windows\kafka-server-start.bat .\config\server.properties
在application.properties中加入 kafka server连接,注意端口
spring.kafka.bootstrap-servers=localhost:9093
1[Kafkav2Application.java]
package com.yangf.kafkav2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Kafkav2Application {
public static void main(String[] args) {
SpringApplication.run(Kafkav2Application.class, args);
}
}
2[MessageController.java]
package com.yangf.kafkav2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/msg")
public class MessageController {
@Resource
private KafkaTemplate<String, String> kafkaTemplate;
@RequestMapping("/send")
public String send(String topic, String key, String value) {
kafkaTemplate.send(topic, key, value);
return "ok";
}
}
3[MessageListener.java]
package com.yangf.kafkav2;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.annotation.KafkaListeners;
import org.springframework.stereotype.Component;
@Component
public class MessageListener {
/**
* 监听订单消息
*/
@KafkaListener(topics = "ORDER", groupId = "OrderGroup")
public void listenToOrder(String data) {
System.out.println("收到订单消息:" + data);
}
/**
* 会员消息
*/
@KafkaListener(topics = "MEMBER", groupId = "MemberGroup")
public void listenToMember(ConsumerRecord<String, String> record) {
System.out.println("收到会员消息:" + record);
}
/**
* 所有消息
*
* 任意时刻,一条消息只会发给组中的一个消费者
*
* 消费者组中的成员数量不能超过分区数,这里分区数是1,因此订阅该主题的消费者组成员不能超过1
*/
@KafkaListeners({@KafkaListener(topics = "ORDER", groupId = "OrderGroup"),
@KafkaListener(topics = "MEMBER", groupId = "MemberGroup")})
public void listenToAll(String data) {
System.out.println("all message :"+data);
}
}
4[pom.xml]
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yangf</groupId>
<artifactId>kafkav2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>kafkav2</name>
<description>springboot kafkav2</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-streams</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
测试url:
localhost:8080/msg/send?topic=ORDER&key=t001&value=999991
localhost:8080/msg/send?topic=MEMBER&key=p001&value=10001