在 Spring Boot 中使用 RabbitMQ

准备工作

RabbitMQ 介绍

参考文章:RabbitMQ 基本概念详解

安装 RabbitMQ

首先需要安装 RabbitMQ,这里使用 docker 进行安装,只需要一行命令:

docker run -d --hostname my-rabbit --restart always --name rabbit -P rabbitmq:3-management

解释

-P 表示随机映射到本机端口;

rabbitmq:3-management 指定用该镜像生成容器,不需要提前 pull 镜像。

--restart always 表示该容器常驻运行。

--name rabbit 表示该容器的名字为 rabbit。

查看容器

使用命令 :

docker ps

如下图

RabbitMQ 端口解释

RabbitMQ 共有 6 个端口,各个端口的区别如下图:

其中,15672 是 UI 界面的端口,由上图可知,它被映射到 32771;

5672 是通信端的端口,由上图可知,它被映射到 32773;

浏览器访问:http://146.56.200.244:32771, 默认的用户名和密码都是 guest,登录后如下图;

在 Spring Boot 中使用 RabbitMQ

所需依赖

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

application。properties 配置

spring.rabbitmq.host=146.56.xxx.xxx
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.port=32773

RabbitMQ 常用的 Exchange Type 有如下四种:

  • fanout

  • direct

  • topic

  • headers

下面使用 direct 类型作为示例:

DirectReceiver(消费者)

@Component
public class DirectReceiver {
    /**
     * 定义一个消费者方法
     * @param msg
     */
    @RabbitListener(queues = "hello.fanqie")
    public void handler1(String msg){
        System.out.println("handler1>>>" + msg);
    }
}

解释

这里定义了一个消费者方法 handler1

使用注解 @RabbitListener(queues = "hello.fanqie"),声明该 queue 的 routing key 为 hello.fanqie

接收 Exchange 路由到的消息 msg ,并打印出来。

RabbitDirectConfig(配置类)

@Configuration
public class RabbitDirectConfig {
    public final static String DIRECTNAME = "queue1";

    @Bean
    Queue queue(){
        return new Queue(DIRECTNAME, true);
    }
}

解释

当 Exchange Type 为 direct 时,配置文件十分简洁,只需要定义一个 Queue 即可。

这里定义的静态变量 queue1 指的是该 Queue 的名字,第二个参数为 true 表示开启持久化。

生产者

在单元测试类中定义一个生产者:

@SpringBootTest
class RabbitmqApplicationTests {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    void contextLoads() {
        // 发送消息给 Exchange 
        rabbitTemplate.convertAndSend("hello.fanqie", "hello fanqie hahaha!");
    }
}

解释

RabbitTemplate 是在 Spring Boot 中整合 RabbitMQ 的关键模板。

该类提供了丰富的发送消息的方法,如 convertAndSend、回调监听消息接口 ConfirmCallback、返回值确认接口 ReturnCallback 等。

参考资源:RabbitTemplate 官方文档

rabbitTemplate.convertAndSend 方法,接受两个参数:

  • routing key ,这里是 hello.fanqie

  • object,这里指发送给 Exchange 的消息内容

测试

先运行生产者,再运行消费者,效果如下图:

参考资源

Spring Boot整合RabbitMQ详细教程

RabbitMq入门以及使用教程

每天学习一点点,每天进步一点点。

posted @ 2020-11-08 16:39  爱吃西瓜的番茄酱  阅读(271)  评论(0编辑  收藏  举报