# springboot-mq-dlx-queue **Repository Path**: linestyle007/springboot-mq-dlx-queue ## Basic Information - **Project Name**: springboot-mq-dlx-queue - **Description**: springboot-mq-dlx-queue - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-30 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot-mq-dlx-queue RabbitMQ死信队列及TTL ## 准备工作 ### 安装RabbitMQ ```scala yum install socat -y # wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.0.2/erlang-23.0.2-1.el7.x86_64.rpm rpm -ivh erlang-23.0.2-1.el7.x86_64.rpm rpm -ivh rabbitmq-server-3.8.4-1.el7.noarch.rpm # 启用RabbitMQ的管理插件 rabbitmq-plugins enable rabbitmq_management # 开启RabbitMQ systemctl start rabbitmq-server # 添加用户 rabbitmqctl add_user root 123456 # 给root添加rw权限 rabbitmqctl set_permissions root -p / ".*" ".*" ".*" # 给用户设置标签 rabbitmqctl set_user_tags root administrator ``` ## 实现步骤 ### 创建springboot项目导入依赖 * pom.xml ```xml org.springframework.boot spring-boot-starter-parent 1.5.21.RELEASE org.springframework.boot spring-boot-starter-amqp org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.3 org.springframework.boot spring-boot-starter-web mysql mysql-connector-java 8.0.17 org.springframework.boot spring-boot-starter-test test ``` ### RabbitMQ配置 * application.yml ```yaml spring: application: name: rabbitmq_deadqueue_demo rabbitmq: host: 192.168.3.11 virtual-host: / username: root password: 123456 publisher-confirms: true port: 5672 datasource: username: root password: 12345678 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/bank?useUnicode=true&characterEncoding=utf8 ``` * RabbitMQConfig ```java @Component public class RabbitMQConfig { private static final String DEAD_LETTERS_QUEUE_NAME = "dead_letters_queue_name"; private static final String DEAD_LETTERS_EXCHANGE_NAME = "dead_letters_exchange_name"; private static final String QUEUE_NAME = "test_dlx_queue_name"; private static final String EXCHANGE_NAME = "test_dlx_exchange_name"; private static final String ROUTING_KEY = "order.add"; /** * 声明死信队列、死信交换机、绑定队列到死信交换机 * 建议使用FanoutExchange广播式交换机 */ @Bean public Queue deadLettersQueue() { return new Queue(DEAD_LETTERS_QUEUE_NAME); } @Bean public FanoutExchange deadLettersExchange() { return new FanoutExchange(DEAD_LETTERS_EXCHANGE_NAME); } @Bean public Binding deadLettersBinding() { return BindingBuilder.bind(deadLettersQueue()).to(deadLettersExchange()); } /** * 声明普通队列,并指定相应的备份交换机、死信交换机 */ @Bean public Queue queue() { Map arguments = new HashMap<>(10); //指定死信发送的Exchange arguments.put("x-dead-letter-exchange", DEAD_LETTERS_EXCHANGE_NAME); return new Queue(QUEUE_NAME, true, false, false, arguments); } @Bean public Exchange exchange() { return new DirectExchange(EXCHANGE_NAME, true, false, null); } @Bean public Binding binding() { return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY).noargs(); } } ``` ## RabbitMQ常用操作命令 ```scala # 前台启动Erlang VM和RabbitMQ rabbitmq-server # 后台启动 rabbitmq-server -detached # 停止RabbitMQ和Erlang VM rabbitmqctl stop # 查看所有队列 rabbitmqctl list_queues # 查看所有虚拟主机 rabbitmqctl list_vhosts # 在Erlang VM运行的情况下启动RabbitMQ应用 rabbitmqctl start_app rabbitmqctl stop_app # 查看节点状态 rabbitmqctl status # 查看所有可用的插件 rabbitmq-plugins list # 启用插件 rabbitmq-plugins enable # 停用插件 rabbitmq-plugins disable # 添加用户 rabbitmqctl add_user username password # 列出所有用户: rabbitmqctl list_users # 删除用户: rabbitmqctl delete_user username # 清除用户权限: rabbitmqctl clear_permissions -p vhostpath # 列出用户权限: rabbitmqctl list_user_permissions username username # 修改密码: rabbitmqctl change_password username newpassword # 设置用户权限: rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*" # 创建虚拟主机: rabbitmqctl add_vhost vhostpath # 列出所以虚拟主机: rabbitmqctl list_vhosts # 列出虚拟主机上的所有权限: rabbitmqctl list_permissions -p vhostpath # 删除虚拟主机: rabbitmqctl delete_vhost vhost vhostpath # 移除所有数据,要在 rabbitmqctl stop_app 之后使用: rabbitmqctl reset ```