前言
springboot 集成kafka 通过生产者与消费者,实现消息发送接收
依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
生产者
- 配置
生产者配置
server:
port: 8081
spring:
application:
name: kafka-producer
kafka:
bootstrap-servers: 192.168.1.206:9092,192.168.1.207:9092,192.168.1.208:9092
template:
default-topic: test_topic
producer:
retries: 1 # 发送消息失败重试次数
batch-size: 16384 # 批量发送数据的配置,数据到这么多就发送
acks: 1
buffer-memory: 33554432 # 设置生产者内存缓存大小32M
key-serializer: org.apache.kafka.common.serialization.StringSerializer # 序列化
value-serializer: org.apache.kafka.common.serialization.StringSerializer
- 生产者代码
@Component
public class KafkaProducerService {
@Value("${spring.application.template.default-topic}")
private String test_topic;
@Resource
private KafkaTemplate<String,Object> kafkaTemplate;
public void sendMessage(Object object){
ListenableFuture<SendResult<String,Object>> future = kafkaTemplate.send(test_topic, object);
future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
@Override
public void onFailure(Throwable e) {
System.err.println("发送消息失败:"+e.toString());
}
@Override
public void onSuccess(SendResult<String, Object> result) {
System.out.println("发送消息成功:"+result.toString());
}
});
}
}
消费者
依赖与消费者一样
- 配置文件
server:
port: 8082
spring:
application:
name: kafka-consumer
kafka:
bootstrap-servers: 192.168.1.206:9092,192.168.1.207:9092,192.168.1.208:9092
consumer:
enable-auto-commit: false # 不自动签收
auto-offset-reset: earliest # 接受所有消息,可以设置成 leatest接受最新
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
listener:
ack-mode: manual # 手动签收
concurrency: 2 # 启动多少个线程做监听
- 消费者代码
@Component
public class KafkaConsumerService {
@KafkaListener(groupId = "test_topic_group_01",topics = "test_topic")
public void onMessage(ConsumerRecord<String,Object> record,
Acknowledgment acknowledgment,
Consumer<?,?> consumer){
System.out.println("接受消息:"+record.value());
//手工签收
acknowledgment.acknowledge();
}
}