最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
消费端模拟重试代码
@Component
public class MQConsumeMsgListenerProcessor implements MessageListenerConcurrently {
private static final Logger logger = LoggerFactory.getLogger(MQConsumeMsgListenerProcessor.class);
/**
-
默认msgs里只有一条消息,可以通过设置consumeMessageBatchMaxSize参数来批量接收消息
-
不要抛异常,如果没有return CONSUME_SUCCESS ,consumer会重新消费该消息,直到return CONSUME_SUCCESS
*/
@Override
public ConsumeConcurrentlyStatus consumeMessage(List msgs, ConsumeConcurrentlyContext context) {
if(CollectionUtils.isEmpty(msgs)){
logger.info(“接受到的消息为空,不处理,直接返回成功”);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
MessageExt messageExt = msgs.get(0);
logger.info(“接受到的消息为:”+messageExt.toString());
if(messageExt.getTopic().equals(“NewMessage”)){
if(messageExt.getTags().equals(“TagA”)){
//TODO 判断该消息是否重复消费(RocketMQ不保证消息不重复,如果你的业务需要保证严格的不重复消息,需要你自己在业务端去重)
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
System.out.printf(df.format(new Date()) + “, %s Receive New Messages: %s %n”, Thread.currentThread().getName(), msgs);
int reconsume = messageExt.getReconsumeTimes();
System.out.println(“重试的次数为”+reconsume);
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
//TODO 获取该消息重试次数
//int reconsume = messageExt.getReconsumeTimes();
//if(reconsume ==3){//消息已经重试了3次,如果不需要再次消费,则返回成功
// //记录日志
// return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
//}
//TODO 处理对应的业务逻辑
最后
2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。
更多JVM面试整理:
a57acb)收录**