pom.xml
)<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProducerController {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/send")
public String sendMessage() {
String queueName = "demo_queue";
String message = "Hello, RabbitMQ!";
// 发送消息到队列
rabbitTemplate.convertAndSend(queueName, message);
return "消息发送成功";
}
}
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class ConsumerService {
// 监听指定队列
@RabbitListener(queues = "demo_queue")
public void receiveMessage(String message) {
System.out.println("收到消息: " + message);
}
}
application.yml
)spring:
rabbitmq:
host: localhost # RabbitMQ 服务器地址
port: 5672 # 端口
username: guest # 用户名
password: guest # 密码
channel.basicQos(1)
实现“公平分发”,消费者处理完当前消息,才会获取下一条,让处理快的消费者多消费。发布订阅模型中,交换机负责将消息路由到多个队列,核心交换机类型有:
*
匹配一个单词、#
匹配多个单词 )模糊匹配,实现更灵活的路由。routingKey=pay.success
。order.#
匹配 order.create
、order.pay.success
等 ),灵活适配多条件路由。服务名.日志级别
路由(如 user-service.error
消息,仅“用户服务错误日志”队列消费 )。routingKey=order.create
路由到库存、积分队列。服务名.日志级别
路由到不同日志队列,集中分析。通过 MQ 解耦、异步化商城各环节,既保障核心流程(如下单 )的高效响应,又能灵活扩展非核心功能,应对大促等高并发场景~