RockeMq-初始以及demo的注解

producer

send-one-way

发送后不会检查发送状态,方法返回值void,常用于log的收集

1
producer.sendOneway(msg)

send-sync

同步发送场景,发送后会返回sendResult用于检查发送状态,适合于订单等场景

1
producer.sendOneway(msg)

send-async

异步发送场景,安全性介于上述两者之间,会有发送结果但是在SendCallback回调中处理

1
2
3
4
5
6
7
8
9
10
11
producer.send(msg,new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("producer sendResult="+sendResult);
}
@Override
public void onException(Throwable e) {
System.out.printf("%-10d Exception %s %n", -1, e);
e.printStackTrace();
}
});

consumer

保续消费

客户端:send(Message msg, MessageQueueSelector selector, Object arg)

  • 实现MessageQueueSelector

消费者

  • MessageListenerOrderly:保续消费

ack机制

  • ConsumeConcurrentlyStatus.CONSUME_SUCCESS:消费成功
  • ConsumeConcurrentlyStatus.RECONSUME_LATER:重复消费。rocketmq会放到重试队列,这个重试TOPIC的名字是%RETRY%+consumergroup的名字

注意:

  1. 如果业务的回调没有处理好而抛出异常,会认为是消费失败当ConsumeConcurrentlyStatus.RECONSUME_LATER处理。
  2. 当使用顺序消费的回调MessageListenerOrderly时,由于顺序消费是要前者消费成功才能继续消费,所以没有ConsumeConcurrentlyStatus.RECONSUME_LATER的这个状态,只有ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT来暂停队列的其余消费,直到原消息不断重试成功为止才能继续消费。

offset的控制

和kafka类似的机制。

todo

  1. 后续补充对offset的理解
  2. 保续消费的实现