SpringBoot 整合 RabbitMQ 并使用发布订阅模式

903 阅读1分钟

前言

我们可以使用 RabbitMQ 的发布订阅模式,实现:

  1. 用户发布动态,其“粉丝”收到其发布动态的消息
  2. 用户下订单,库存模块、支付模块等收到消息并处理
  3. 等等

使用

  1. 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>
  1. 编写配置文件
spring:
  rabbitmq:
    addresses: 127.0.0.1
    port: 5672
    username: admin
    password: admin
  1. 编写配置类
@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());
    }

}
  1. 编写消息发布者
@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);
    }

}
  1. 编写消息消费者
@Component
public class Receiver {

    // 指定监听的队列,一旦队列有消息,就会接受消息并消费
    @RabbitListener(queues = MQConfig.MOMENTS_QUEUE)
    public void receive(String message) {
        System.out.println("消费消息:" + message);
    }

}
  1. 控制层代码
@RestController
public class TestController {

    @Autowired
    private Sender sender;

    @GetMapping("/test")
    public void sendMessage() {

        sender.sendMessage("message");

    }

}
  1. 测试结果:
class com.example.rabbitmqdemo.mq.Sender推送消息:message
class com.example.rabbitmqdemo.mq.Receiver消费消息:message