private void ackRequest( final FetchRequest request, final MessageIterator it, final boolean ack) { request.setOffset( request.getOffset() + it.getOffset(), it.getPrevMessage() != null ? it.getPrevMessage().getId() : -1, ack); this.addRequst(request); }
private boolean processWhenRetryTooMany(final FetchRequest request, final MessageIterator it) { if (SimpleFetchManager.this.isRetryTooMany(request)) { try { final Message couldNotProecssMsg = it.next(); MessageAccessor.setPartition(couldNotProecssMsg, request.getPartitionObject()); MetaStatLog.addStat(null, StatConstants.SKIP_MSG_COUNT, couldNotProecssMsg.getTopic()); SimpleFetchManager.this.consumer.appendCouldNotProcessMessage(couldNotProecssMsg); } catch (final InvalidMessageException e) { MetaStatLog.addStat(null, StatConstants.INVALID_MSG_STAT, request.getTopic()); // 消息体非法,获取有效offset,重新发起查询 this.getOffsetAddRequest(request, e); return true; } catch (final Throwable t) { this.LogAddRequest(request, t); return true; } request.resetRetries(); // 跳过这条不能处理的消息 request.setOffset(request.getOffset() + it.getOffset(), it.getPrevMessage().getId(), true); // 强制设置延迟为0 request.setDelay(0); SimpleFetchManager.this.addFetchRequest(request); return true; } else { return false; } }