# Spring-AMQP **Repository Path**: orange_cn/spring-amqp ## Basic Information - **Project Name**: Spring-AMQP - **Description**: 基于Spring-AMQP的RabbitMQ学校demo - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-09-14 - **Last Updated**: 2023-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RabbitMQ Spring AMQP ## 1,准备 ### 1.1 安装rabbitmq(单机模式): ```shell docker run -d --name rabbitmq -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15674:15674 rabbitmq:management ``` > 安装后默认用户名密码guest,自行创建用户qingzhou,增加 virtual host #### 安装stomp插件 ```shell rabbitmq-plugins enable rabbitmq_web_stomp rabbitmq-plugins enable rabbitmq_web_stomp_examples ``` > 如果搭建集群 可参考 https://blog.csdn.net/yinjl123456/article/details/120298583 #### 安装延时队列插件(delayed_message_exchange) ```shell 下载解压文件 链接:https://pan.baidu.com/s/1PpeOn8NJT4hgh7ZBP0J0OA?pwd=u2gu 提取码:u2gu ``` 拷贝插件文件到 rabbitMQ 的 Docker 容器中 先解压 ``` unzip unzip rabbitmq_delayed_message_exchange-20171201-3.7.x.zip ``` 拷贝插件 ``` docker cp rabbitmq_delayed_message_exchange-20171201-3.7.x.ez rabbitmq3.7.7:/plugins ``` 进入容器: ``` docker ps // 查看启动容器信息 docker exec -it 镜像ID /bin/bash //开启进入终端 ``` 查看插件列表 ``` rabbitmq-plugins list ``` 启用插件 ``` rabbitmq-plugins enable rabbitmq_delayed_message_exchange ``` ### 1.2 Mq界面认识 #### 1.2.1 概要 ![img.png](imgs/img2.png) #### 1.2.2 连接:当前连接到Mq的机器的信息 ![img.png](imgs/img3.png) #### 1.2.3 通道 ![img.png](imgs/img4.png) #### 1.2.4 交换机 交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列 ![img.png](imgs/img5.png) #### 交换机Type ![img.png](imgs/img1.png) #### 交换机Features ![img.png](imgs/img6.png) #### 1.2.5 队列 ![img.png](imgs/img7.png) 点击名称进去,可以看到队列的详细信息 ![img.png](imgs/img8.png) arguments具体参数如下: ![img.png](imgs/img9.png) ## 2,Demo项目 ### 2.1 项目结构 ```shell com.chenhao.springamqp - config: 一些配置类 - controller: 测试用到的controller - model: 五种模式示例 - use: 一些应用场景 - ConsumerConfirm: 消息确认机制 - DelayedQueue:延时队列 - DLXQueue:死信队列 - ttlQueue:TTL队列 ``` ### 2.2 启动方式 这个应用程序使用 Spring Profiles 来控制它的行为,我们现在必须构建 JAR 文件: ```shell ./mvnw clean package ``` 请执行以下命令来启动各种模式: ```shell # 消息模式 hello world java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=hello-world,dev # 消息模式 work-queue java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=work-queue,dev # 消息模式 publish_subscribe java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=publish_subscribe,dev # 消息模式 routing java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=routing,dev # 消息模式 topics java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=topics,dev # 延时队列 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=DelayedQueue,dev # TTL队列 发送者 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=TtlQueue,Sender,dev # TTL队列 接收者 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=TtlQueue,Receiver,dev # 死信队列 发送者 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=DLXQueue,Sender,dev # 死信队列 死信队列 接收者 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=DLXQueue,Receiver,DLX,dev # 死信队列 TTL队列 接收者 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=DLXQueue,Receiver,TTL,dev # 确认机制测试 java -jar Spring-AMQP-0.0.1-SNAPSHOT.jar --spring.profiles.active=confirm,dev ``` > 如果队列设置了手动确认,而不去确认时 > 如果没有设置预取限制,则消息会下发到Unacked中(最大为Prefetch count=250),此时,消费者代码不会走到,频繁的操作会使消费能力降低 参考文档: - [rabbitmq详解](https://blog.csdn.net/qq_48721706/article/details/125194646) - [Docker安装RabbitMQ集群_亲测成功](https://blog.csdn.net/yinjl123456/article/details/120298583) - [RabbitMQ](https://www.jianshu.com/p/78847c203b76) - [RabbitMQ之Qos prefetch](https://www.jianshu.com/p/4d043d3045ca) - [Spring-RabbitMQ参数配置详解](https://blog.csdn.net/girlgolden/article/details/97915368)