• 在 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入门以及使用教程

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

  • 相关阅读:
    coredump文件设置及调试
    github上传本地代码库步骤
    ubuntu上SVN版本升级到1.7
    ubuntu 上samba创建共享组目录
    linux下创建只有某个用户组可用的文件夹
    usermod -a表示在原来所属组的基础上追加
    linux mount
    Ubuntu Bash and Dash
    svn co 默认密钥' GNOME keyring
    精简版ffmpeg编译脚本
  • 原文地址:https://www.cnblogs.com/youcoding/p/13944817.html
Copyright © 2020-2023  润新知