Springboot + rabbitMq队列

1.linux上直接拉个mq镜像,直接启动,设置了镜像名my-rabbitmq, 设置端口映射出去,设置账号和密码为admin

docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3

 

2.开启可视化界面

 先进入容器内部

docker exec -it my-rabbitmq bash

然后启动界面

rabbitmq-plugins enable rabbitmq_management

访问:地址:15672  登录即可。

 

 

3.springboot中使用

安装依赖

<!--        rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

 

配置文件

spring:
  rabbitmq:
    host: 192.168.17.13 # RabbitMQ服务器地址
    port: 5672       # RabbitMQ服务器端口
    username: admin  # 默认用户名
    password: admin  # 默认密码
    virtual-host: /  # 虚拟主机

 

 写配置类:

@Configuration
public class RabbitMQConfig {

    // 定义队列
    @Bean
    public Queue queue() {
        return new Queue("myQueue", true);
    }
    
    //可以定义多个队列
    // 定义第二个队列
    @Bean
    public Queue queue2() {
        return new Queue("myQueue2", true);
    }

    // 定义第三个队列
    @Bean
    public Queue queue3() {
        return new Queue("myQueue3", true);
    }
    

    // 定义交换机
    @Bean
    public TopicExchange exchange() {
        return new TopicExchange("myExchange");
    }

    // 绑定队列和交换机
    @Bean
    public Binding binding(Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("myRoutingKey");
    }
    
    // 绑定队列和交换机队列2的
    @Bean
    public Binding bindingQueue2(Queue queue2, TopicExchange exchange) {
        return BindingBuilder.bind(queue2).to(exchange).with("myRoutingKey2");
    }
    
}

定义队列

@Bean public Queue queue() {

      return new Queue("myQueue", true);

}

  • 第一个参数"myQueue"是队列的名称,这是一个自定义的标识符,用于唯一标识这个队列。
  • 第二个参数true表示这个队列是持久化的,即在RabbitMQ服务器重启后,队列依然存在,不会丢失数据。

 

定义交换机

@Bean public TopicExchange exchange() {

      return new TopicExchange("myExchange");
}

创建一个名为myExchange的主题交换机(Topic Exchange)实例。

  • TopicExchange是一种交换机类型,它使用主题(Topic)进行消息路由。生产者发送消息时,可以指定一个路由键,消费者可以根据自己的需求订阅匹配特定模式的消息。
  • 交换机名称"myExchange"是自定义的,用于标识这个交换机。

 

绑定队列和交换机

@Bean public Binding binding(Queue queue, TopicExchange exchange) {

      return BindingBuilder.bind(queue).to(exchange).with("myRoutingKey");
}

这个方法创建了一个绑定实例,它定义了如何将队列绑定到交换机,并指定了路由键。

  • BindingBuilder是RabbitMQ提供的一个工具类,用于构建绑定关系。
  • bind(queue)方法指定了要绑定的队列。
  • to(exchange)方法指定了要绑定到的交换机。
  • with("myRoutingKey")方法指定了路由键。在这个例子中,所有的路由键都是"myRoutingKey"。这意味着只有当消息的路由键是"myRoutingKey"时,交换机才会将消息路由到这个队列。

 

配置完了,现在去写生产者代码,也就是发消息到mq上的代码

convertAndSend方法要把刚配置类的交换机和路由键填上。

@Component
public class MessageSender {

    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public MessageSender(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void send(String message) {
        rabbitTemplate.convertAndSend("myExchange", "myRoutingKey", message);
    }
}

 

现在写消费者代码,也就是接收到消息后的处理

指定监控哪个队列,然后获取的信息打印出来,或者做其它处理。

@Component
public class MessageReceiver {

    @RabbitListener(queues = "myQueue")
    public void receive(String message) {
        System.out.println("Received message: " + message);
    }
}

 

posted @ 2024-04-01 00:51  Hello霖  阅读(9)  评论(0编辑  收藏  举报