springboot连接kafka超时处理_百万级别的连接超时处理,怎么做,一文看懂

业务场景:

如果我们用过一些在线客服系统,常常会遇到这样的问题。如果我们3分钟没有跟客服对话了,那么就会弹出一条消息跟你说,你3分钟没有会话了,已经自动离线了。

首先学习一个东西我们要了解这个东西背后的原因,这种产品逻辑主要有2个好处:

1.减少客户端/用户跟服务器的链接,减少服务的压力。一般我们一个机器也就维护几十万的长连接,很多用户都是咨询完不立马关掉窗口的,如果我们一直保持长连接,很消耗机器的性能。

2.更方便于客服资源的分配,例如一个在线客服可能最多同时接待20个用户,及时地发现不活跃的用户,有利于提高在线客服的接待效率。(万恶的资本家)

c996beba334d26a566c503a658af0977.png

方案:

从开发人员的角度看来,这个叫做链接超时。实现这个功能,我们一般有下面几种不同的方案:

1.我们创建一个定时器,用一个map来存储所有的用户最活跃的时间,每隔1秒钟检查所有所有的用户,判断用户上一次活跃的时间距离当前时间是否超过3分钟,如果已经超过3分钟,那么就将这个用户淘汰,标记为不活跃。这种实现的优点是实现简单,逻辑也非常简单,缺点是每次都需要轮询,效率太低。而且在map里面淘汰一个元素,可能会涉及到锁的问题,有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,你可以通过自定义`KafkaListenerErrorHandler`来处理连接Kafka失败时的情况,并执行自定义的代码。`KafkaListenerErrorHandler`是一个接口,你可以实现它并覆盖`handle(Exception ex, ConsumerRecord<?, ?> record)`方法来定义错误处理逻辑。 以下是一个示例代码: ```java @Component public class CustomKafkaListenerErrorHandler implements KafkaListenerErrorHandler { @Override public Object handleError(Message<?> message, ListenerExecutionFailedException exception, Consumer<?, ?> consumer) { // 处理连接Kafka失败的逻辑 // 可以执行自定义的代码,比如记录日志、发送通知等 // 返回一个用于处理错误消息的结果,可以是一个新的消息对象或者其他业务逻辑需要的返回值 return null; } @Override public Object handleError(Message<?> message, ListenerExecutionFailedException exception) { return handleError(message, exception, null); } } ``` 在上面的示例中,我们实现了`KafkaListenerErrorHandler`接口,并覆盖了`handleError()`方法来处理连接Kafka失败时的情况。你可以在该方法中编写自定义的错误处理逻辑,比如记录日志、发送通知等。最后,根据业务需求返回一个用于处理错误消息的结果。 接下来,你需要将自定义的错误处理器与`@KafkaListener`注解关联起来。可以在对应的消费者方法上使用`errorHandler`属性进行配置,指定使用哪个错误处理器。例如: ```java @KafkaListener(topics = "myTopic", errorHandler = "customKafkaListenerErrorHandler") public void listen(ConsumerRecord<?, ?> record) { // 消息处理逻辑 } ``` 在上面的示例中,我们将`errorHandler`属性设置为`"customKafkaListenerErrorHandler"`,这样当连接Kafka失败时,就会调用`CustomKafkaListenerErrorHandler`中定义的错误处理逻辑。 通过以上步骤,你可以在连接Kafka失败时执行自定义的代码,并进行相应的处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值