Esempio n. 1
0
 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);
 }
Esempio n. 2
0
    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;
      }
    }