【spring boot】 重启kafka客户端连接
背景
kafka 服务端重建时,kafka客户端会连不上kafka服务端,此时需要重启客户端重连
代码实现
@Service
public class KafkaConsumerService {
private KafkaConsumer<String, String> consumer;
@Autowired
private KafkaProperties kafkaProperties;
//在应用程序启动时初始化Kafka消费者,并启动一个单独的线程用于消费消息
@PostConstruct
public void init() {
consumer = new KafkaConsumer<>(kafkaProperties.buildConsumerProperties());
consumer.subscribe(Arrays.asList("myTopic"));
Executors.newSingleThreadExecutor().submit(this::consume);
}
@PreDestroy
public void destroy() {
consumer.close();
}
private void consume() {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
// 处理消息逻辑
}
}
}
//先关闭现有的Kafka消费者,然后创建一个新的消费者实例,并重新订阅我们的主题。最后,我们使用 ExecutorService 启动一个新的消费者线程
public void restart() {
consumer.close();
consumer = new KafkaConsumer<>(kafkaProperties.buildConsumerProperties());
consumer.subscribe(Arrays.asList("myTopic"));
Executors.newSingleThreadExecutor().submit(this::consume);
}
}
分类:
spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构