参考链接
https://rocketmq.apache.org/zh/
生产者
基本概念
https://rocketmq.apache.org/zh/docs/4.x/producer/01concept1
消息
Tag
什么时候该用 Topic,什么时候该用 Tag?
Keys
队列
生产者
普通消息发送
1.向集群中创建 Topic
2.添加客户端依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.9.4</version>
</dependency>
3.消息发送
3.1 同步发送
SendResult sendResult = producer.send(msg);
3.2 异步发送
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.printf("%-10d OK %s %n", index,
sendResult.getMsgId());
}
@Override
public void onException(Throwable e) {
System.out.printf("%-10d Exception %s %n", index, e);
e.printStackTrace();
}
});
3.3 单向模式发送
producer.sendOneway(msg);
顺序消息发送
顺序消息介绍
顺序消息示例代码
SendResult sendResult = producer.send(msg, new MessageQueueSelector() {
@Override
public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
Integer id = (Integer) arg;
int index = id % mqs.size();
return mqs.get(index);
}
}, orderId);
顺序消息的一致性
延迟消息发送
延时消息介绍
延时消息约束
延时消息示例代码
Message message = new Message("TestTopic", ("Hello scheduled message " + i).getBytes());
message.setDelayTimeLevel(3);
核心就是setDelayTimeLevel
批量消息发送
事务消息发送
事务消息介绍
事务消息步骤
消费者
基础概念
https://rocketmq.apache.org/zh/docs/4.x/consumer/01concept2
消费者与消费组
负载均衡
消费位点
推、拉和长轮询
Push消费(推送)
集群模式和广播模式
并发消费和顺序消费
consumer.registerMessageListener(new MessageListenerOrderly() {
AtomicLong consumeTimes = new AtomicLong(0);
@Override
public ConsumeOrderlyStatus consumeMessage(List<MessageExt> msgs, ConsumeOrderlyContext context) {
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
this.consumeTimes.incrementAndGet();
if ((this.consumeTimes.get() % 2) == 0) {
return ConsumeOrderlyStatus.SUCCESS;
} else if ((this.consumeTimes.get() % 5) == 0) {
context.setSuspendCurrentQueueTimeMillis(3000);
return ConsumeOrderlyStatus.SUSPEND_CURRENT_QUEUE_A_MOMENT;
}
return ConsumeOrderlyStatus.SUCCESS;
}
});
消息过滤
Tag
SQL92过滤
消息重试和死信队列
消息重试
死信队列
Pull消费(拉)
https://rocketmq.apache.org/zh/docs/4.x/consumer/03pull
涉及到的类
DefaultMQPullConsumer
DefaultLitePullConsumer
Pull Consumer
public enum PullStatus {
FOUND,
NO_NEW_MSG,
NO_MATCHED_MSG,
OFFSET_ILLEGAL
}
Lite Pull Consumer
基本最佳实践
https://rocketmq.apache.org/zh/docs/4.x/bestPractice/01bestpractice