# 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
```