producer
send-one-way
发送后不会检查发送状态,方法返回值void,常用于log的收集
1 | producer.sendOneway(msg) |
send-sync
同步发送场景,发送后会返回sendResult用于检查发送状态,适合于订单等场景
1 | producer.sendOneway(msg) |
send-async
异步发送场景,安全性介于上述两者之间,会有发送结果但是在SendCallback回调中处理
1 | producer.send(msg,new SendCallback() { |
consumer
保续消费
客户端:send(Message msg, MessageQueueSelector selector, Object arg)
- 实现MessageQueueSelector
消费者
- MessageListenerOrderly:保续消费
ack机制
- ConsumeConcurrentlyStatus.CONSUME_SUCCESS:消费成功
- ConsumeConcurrentlyStatus.RECONSUME_LATER:重复消费。rocketmq会放到重试队列,这个重试TOPIC的名字是%RETRY%+consumergroup的名字
注意:
- 如果业务的回调没有处理好而抛出异常,会认为是消费失败当ConsumeConcurrentlyStatus.RECONSUME_LATER处理。
- 当使用顺序消费的回调MessageListenerOrderly时,由于顺序消费是要前者消费成功才能继续消费,所以没有ConsumeConcurrentlyStatus.RECONSUME_LATER的这个状态,只有ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT来暂停队列的其余消费,直到原消息不断重试成功为止才能继续消费。
offset的控制
和kafka类似的机制。
todo
- 后续补充对offset的理解
- 保续消费的实现