用大白话解释消息中间件AMQPRocketMQ是什么,有什么用,怎么用

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是系统间的“快递员”,让数据传递更高效、更安全。安装简单,使用灵活,适合电商、金融等高并发场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值