RocketMQ是什么?
RocketMQ就像快递公司的“智能分拣中心”,专门帮不同系统之间传递数据包(消息)。它由阿里巴巴开发,后来成为全球顶级的开源项目,特别擅长处理高并发场景,比如双11的订单洪峰。它的核心任务是让发送消息的系统和接收消息的系统不用直接联系,避免“一个系统挂掉,其他系统全崩”的连锁反应。
RocketMQ有什么用?
解耦系统:
例子:用户下单后,订单系统发一条消息到RocketMQ,积分系统、库存系统各自去拿消息处理。就算积分系统崩溃了,订单系统照样能正常工作。
作用:让不同系统独立运作,互不影响。
流量缓冲:
例子:双十一瞬间涌入的订单会被RocketMQ暂时存起来,按系统处理能力慢慢消化,避免服务器被压垮。
作用:像水库一样,把洪水般的数据“削峰填谷”。
数据广播:
例子:一条下单消息可以同时被物流系统、推荐系统、财务系统消费,实现“一次发送,多方使用”。
作用:省得每个系统都单独找订单系统要数据 。
其他实用功能:
定时消息:比如外卖订单30分钟后提醒商家接单。
消息重试:消费失败的消息自动重新投递。
事务消息:保证支付和库存扣减要么同时成功,要么同时失败。
RocketMQ怎么用?三步走:安装、发消息、收消息
安装(就像搭快递分拣站)
下载安装包:去官网下载,解压到电脑上。
启动NameServer(调度中心):
nohup sh bin/mqnamesrv & # 后台运行
启动Broker(分拣中心):
nohup sh bin/mqbroker -n 127.0.0.1:9876 & # 连接到NameServer
可视化监控(选装):装个监控面板,实时看消息堆积情况。
发消息(像寄快递)
生产者代码逻辑:
// 1. 创建快递员(生产者)
DefaultMQProducer producer = new DefaultMQProducer("生产者组");
producer.setNamesrvAddr("localhost:9876"); // 告诉快递员分拣中心地址
producer.start();
// 2. 打包消息(指定标签和内容)
Message msg = new Message("订单Topic", "创建标签", "订单001".getBytes());
// 3. 寄出快递(发消息)
producer.send(msg);
支持三种模式:同步发(等确认)、异步发(不等待)、单向发(只管发)。
收消息(像收快递)
消费者代码逻辑:
// 1. 创建收件人(消费者)
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("消费者组");
consumer.subscribe("订单Topic", "*"); // 订阅所有标签的消息
// 2. 设置收件规则(监听消息)
consumer.registerMessageListener((消息列表, 上下文) -> {
for (Message msg : 消息列表) {
System.out.println("收到订单:" + new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; // 确认签收
});
consumer.start();
消费者可以批量收件,支持多线程处理。
注意事项
顺序问题:
同一个订单的创建、支付、发货消息要按顺序处理,需指定同一队列(Queue)。
重复消费:
网络问题可能导致消息重复,业务代码要做“去重”(比如用唯一订单号) 。
消息堆积:
消费者处理不过来时,可以加机器或者设置消息过期时间 。
RocketMQ是系统间的“快递员”,让数据传递更高效、更安全。安装简单,使用灵活,适合电商、金融等高并发场景。