概述
在kafka中,或者是说在任何消息队列中都有个消费顺序的问题。为了保证一个队列顺序消费,当当中一个消息消费异常时,必将影响后续队列消息的消费,这样业务岂不是卡住了。比如笔者举个最简单的例子:我发送1-100的消息,在我的处理逻辑当中 msg%5==0我就进行 int i=1/0操作,这必将抛异常,一直阻塞在msg=5上,后面6-100无法消费。下面笔者给出解决方案。
重试一定次数(消息丢失)
@KafkaHandler
@KafkaListener(topics = {"quickstart-events"},groupId = "test-consumer-group-2", concurrency = "1")
public void test6(String msg){
businessProcess(msg);
}
private void businessProcess(String msg){
System.out.println("接收到消息:" + msg + "--" + System.currentTimeMillis() + "---" + Thread.currentThread().hashCode());
if (Integer.valueOf(msg) % 5 == 0) {
int i = 1 / 0;
}
}
说明:如果读者使用的是java客户端,也就是spring进行实现,那么在不做任何处理的情况下,会