引言
经常有开发者问:现在的项目里,消息中间件到底该选 RabbitMQ 还是 RocketMQ?
这确实是个高频问题。两者都是业界主流,但基因不同,适用场景也有明显差异。今天我们就来深入聊聊这个话题,希望能帮你理清思路。
为什么需要消息队列?
有些同学虽然用过 MQ,但未必清楚它的核心价值。先通过一个订单系统的常见场景来理解:
没有消息队列的系统:
@RestController
public class OrderController {
@Autowired
private InventoryService inventoryService;
@PostMapping("/order")
public Result createOrder(@RequestBody OrderRequest request) {
// 串行调用多个服务,用户必须等待所有操作完成
inventoryService.deductStock(request.getProductId(), request.getQuantity());
promotionService.updatePromotionUsage(request.getUserId(), request.getPromotionId());
logService.recordOrderLog(request);
return Result.success("下单成功");
}
}
引入消息队列后:
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private RocketMQTemplate rocketMQTemplate;
@PostMapping("/order")
public Result createOrder(@RequestBody OrderRequest request) {
// 1. 保存订单主记录(核心业务)
Order order = orderService.saveOrder(request);
// 2. 发送消息,异步处理非核心业务
OrderCreatedEvent event (order);
rocketMQTemplate.send(, event);
Result.success();
}
}
<OrderCreatedEvent> {
{
inventoryService.deductStock(event.getProductId(), event.getQuantity());
promotionService.updatePromotionUsage(event.getUserId(), event.getPromotionId());
logService.recordOrderLog(event);
}
}





