CMResult.CR_THROW_EXCEPTION:消费异常 CMResult.CR_RETURN_NULL:消费结果为null 针对CMResult.CR_LATER状态的处理策略为:将该消息发挥Broker,继续等待后续消息。发送回的消息会设置重试的Topic,命名规则为:“%RETRY%” + Consumer组名,消息原本的Topic会暂存到消息体中,并且会额外设置delayLevel及reconsumeTimes 消息...
如果这时候消息消费失败,例如数据库异常,余额不足扣款失败等一切业务认为消息需要重试的场景,只要返回ConsumeConcurrentlyStatus.RECONSUME_LATER,RocketMQ就会认为这批消息消费失败了。 为了保证消息是肯定被至少消费成功一次,RocketMQ会把这批消息重发回Broker(topic不是原topic而是这个消费租的RETRY topic),在延迟的某个时...
MessageListener是在ConsumeMessageConcurrentlyService中被调用的,可以看到上述两个状态会分别映射到CMResult定义的枚举值,CMResult的枚举值如下。 1)CMResult.CR_SUCCESS,消费成功。 2)CMResult.CR_LATER,推迟消费。 3)CMResult.CR_ROLLBACK,事务消息回滚。 4)CMResult.CR_COMMIT,事务消息投递。 5)CMResult.CR_THRO...
如果业务的回调没有处理好而抛出异常,会认为是消费失败当ConsumeConcurrentlyStatus.RECONSUME_LATER处理。 当使用顺序消费的回调MessageListenerOrderly时,由于顺序消费是要前者消费成功才能继续消费,所以没有ConsumeConcurrentlyStatus.RECONSUME_LATER的这个状态,只有ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT来暂停队列...
如果这时候消息消费失败,例如数据库异常,余额不足扣款失败等一切业务认为消息需要重试的场景,只要返回ConsumeConcurrentlyStatus.RECONSUME_LATER,RocketMQ就会认为这批消息消费失败了。 为了保证消息是肯定被至少消费成功一次,RocketMQ会把这批消息重发回Broker(topic不是原topic而是这个消费租的RETRY topic),在延迟的某个时...
(CMResult.CR_SUCCESS); break; case RECONSUME_LATER: result.setConsumeResult(CMResult.CR_LATER); break; default: break; } } else { result.setConsumeResult(CMResult.CR_RETURN_NULL); } } catch (Throwable e) { result.setConsumeResult(CMResult.CR_THROW_EXCEPTION); result.setRemark(Remoting...
case RECONSUME_LATER: result.setConsumeResult(CMResult.CR_LATER); break; default: break; } } else { result.setConsumeResult(CMResult.CR_RETURN_NULL); } } catch (Throwable e) { result.setConsumeResult(CMResult.CR_THROW_EXCEPTION);
CR_SUCCESS); break; case RECONSUME_LATER: result.setConsumeResult(CMResult.CR_LATER); break; default: break; } } else { result.setConsumeResult(CMResult.CR_RETURN_NULL); } } catch (Throwable e) { result.setConsumeResult(CMResult.CR_THROW_EXCEPTION); result.setRemark(Remoting...
(CMResult.CR_SUCCESS); break; case RECONSUME_LATER: result.setConsumeResult(CMResult.CR_LATER); break; default: break; } } else { result.setConsumeResult(CMResult.CR_RETURN_NULL); } } catch (Throwable e) { result.setConsumeResult(CMResult.CR_THROW_EXCEPTION); result.setRemark(Remoting...
• RocketMQ实战与原理解析 ConcurrentlyMaxSpan ()) { this.executePullRequestLater(pullRequest, PULL TIME DELAY M工LLS WHEN FLOW CONTROL); if ((queueMaxSpanFlowControlTimes+ +毛 1000) 0) { log.warn( the queues messages, span 七oo long, so do flow control, minOffset=(}, maxOffset=(}...