0. 背景重现
最近搭建一个新项目,基于SpringBoot框架,使用Kafka做消息中间件。
使用@KafkaListener注解来创建一个消费者,实现对Kafka消息的消费。我计划的执行顺序是这样的:服务启动之后,创建Consumer实例,执行loadResourceConfig初始化方法,之后才开始消费Kafka的消息。
但是出现了一个问题:没有等loadResourceConfig方式执行完毕,@KafkaListener就开始消费消息了。
这显然不是我们期望的,下面是大概的代码:
@Component
public class Consumer{
@PostConstruct
private void loadResourceConfig () {//加载数据
// 加载资源配置
}
/**
* 接收数据处理
* @param record
*/
@KafkaListener(id = "device-data",topics = {"${DataTopic}"})
public void listen(ConsumerRecord<String, ?> record) {
Optional kafkaMessage = Optional.ofNullable(record.value());
Optional<String> kafkaKey = Optional.ofNullable(record.key());
if (kafkaKey.isPresent()) {
Object value = kafkaMessage.get();