前言
我们可以使用 RabbitMQ 的发布订阅模式,实现:
- 用户发布动态,其“粉丝”收到其发布动态的消息
- 用户下订单,库存模块、支付模块等收到消息并处理
- 等等
使用
- Maven 文件引入 RabbitMQ 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!-- 使用http 请求进行测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 编写配置文件
spring:
rabbitmq:
addresses: 127.0.0.1
port: 5672
username: admin
password: admin
- 编写配置类
@Configuration
public class MQConfig {
public static final String MOMENTS_EXCHANGE = "moments-exchange";
public static final String MOMENTS_QUEUE = "moments-queue";
@Bean
public Queue momentsQueue() {
return new Queue(MOMENTS_QUEUE);
}
@Bean
public FanoutExchange momentsExchange() {
return new FanoutExchange(MOMENTS_EXCHANGE);
}
@Bean
public Binding MomentsBinding() {
return BindingBuilder.bind(momentsQueue()).to(momentsExchange());
}
}
- 编写消息发布者
@Component
public class Sender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(String message) {
System.out.println("推送消息:" + message);
// 1. 指定交换机;
// 2. 配置文件中没有设置 绑定key,不需要指定;
// 3. 发送的消息
rabbitTemplate.convertAndSend(MQConfig.MOMENTS_EXCHANGE, "", message);
}
}
- 编写消息消费者
@Component
public class Receiver {
// 指定监听的队列,一旦队列有消息,就会接受消息并消费
@RabbitListener(queues = MQConfig.MOMENTS_QUEUE)
public void receive(String message) {
System.out.println("消费消息:" + message);
}
}
- 控制层代码
@RestController
public class TestController {
@Autowired
private Sender sender;
@GetMapping("/test")
public void sendMessage() {
sender.sendMessage("message");
}
}
- 测试结果:
class com.example.rabbitmqdemo.mq.Sender推送消息:message
class com.example.rabbitmqdemo.mq.Receiver消费消息:message