Linux平台RabbitMQ安装与配置教程

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:RabbitMQ是一个开源的高级消息队列协议(AMQP)实现,基于Erlang编程语言开发,为分布式系统提供高可用性、可扩展性和可靠性。本指南介绍在Linux环境中安装RabbitMQ服务器的步骤,包括Erlang依赖的安装、RabbitMQ服务的启动和配置。同时,介绍了如何设置防火墙规则以允许外部访问,并提供了一个延迟消息交换插件的启用示例。此外,还可能包含日志查看、用户管理、虚拟主机设置和安全策略等深入信息。 linux版本rabbitmq

1. Linux环境下RabbitMQ概述

1.1 RabbitMQ简介

RabbitMQ是一个在AMQP(高级消息队列协议)基础上实现的消息代理软件,它使得应用程序之间能够轻松、可靠地传递异步消息。RabbitMQ是用Erlang编写的,因此它具有高度可扩展、可靠和易于维护的特点。它广泛应用于订单处理、任务队列、应用集成、负载均衡等领域。

1.2 Linux环境下RabbitMQ的优势

Linux环境下安装RabbitMQ具有天然的优势。由于RabbitMQ和Erlang对Linux的支持良好,用户可以更方便地管理RabbitMQ服务。在Linux系统上,RabbitMQ作为服务运行,可以通过各种管理工具和服务管理命令进行控制。此外,Linux的开源性质使得RabbitMQ在这一平台上的部署和维护更加灵活和高效。

1.3 RabbitMQ的应用场景

RabbitMQ主要应用场景包括但不限于:消息队列、异步处理、服务间通信、分布式系统间的数据交换、应用解耦和系统伸缩。RabbitMQ通过提供多种消息交换类型(如direct, topic, fanout, headers等)来满足不同业务需求。在消息可靠性、消息持久化、负载均衡、故障转移等方面,RabbitMQ也提供了一系列解决方案。

flowchart LR
    A[消息生产者] -->|发送消息| B(RabbitMQ)
    B -->|路由消息| C[消息消费者]
    B -->|持久化存储| D[磁盘]
    B -->|消息确认| A

此流程图展示了RabbitMQ在消息传递中的角色,即生产者发送消息到RabbitMQ,然后由RabbitMQ将消息路由到正确的消费者并进行持久化存储。同时,该图也表明了RabbitMQ在消息确认机制中的作用,确保消息的可靠传递。

2. Erlang安装步骤

在现代信息技术中,Erlang扮演了至关重要的角色,尤其是在运行像RabbitMQ这样的消息队列系统时。Erlang是一种专为构建并发和分布式系统设计的编程语言和运行时环境。为了顺利安装RabbitMQ,首先要确保Erlang环境已经正确搭建。本章节将详细介绍Erlang在Linux环境下的安装步骤,包括版本选择、下载、安装以及环境配置。

2.1 Erlang版本选择与下载

2.1.1 根据RabbitMQ版本选择合适的Erlang版本

RabbitMQ官方推荐使用特定版本的Erlang来保证其兼容性和最佳性能。为了确保RabbitMQ能正常工作,开发者需要先查看RabbitMQ官方文档来确定与RabbitMQ版本相匹配的Erlang版本。

RabbitMQ与Erlang版本兼容性矩阵通常如下所示:

| RabbitMQ版本 | 推荐Erlang版本 | |--------------|-----------------| | 3.7.x | 20.3 | | 3.8.x | 22.0 | | 3.9.x | 23.0 |

请注意,版本兼容性可能会随时间更新而变化,因此在安装之前,务必访问 官方文档 查看最新的版本兼容信息。

2.1.2 官网或其他资源下载Erlang

一旦确定了需要安装的Erlang版本,下一步就是从官方网站或者其他可信的资源下载Erlang安装包。以下是访问Erlang官方网站并下载特定版本Erlang的步骤:

# 使用wget下载Erlang的压缩包
wget https://github.com/erlang/otp/releases/download/OTP-23.0/otp_src_23.0.tar.gz

# 如果使用curl下载
curl -O https://github.com/erlang/otp/releases/download/OTP-23.0/otp_src_23.0.tar.gz

2.2 Erlang安装与环境配置

2.2.1 安装Erlang包及其依赖

安装Erlang之前,需要确保系统中安装了编译Erlang所需的依赖包。这些依赖包包括但不限于gcc, ncurses, openssl等。以下是在基于Debian的Linux发行版中安装这些依赖的方法:

# 安装依赖
sudo apt-get install build-essential libncurses5-dev libssl-dev

# 解压Erlang压缩包
tar -xzf otp_src_23.0.tar.gz

# 进入解压后的目录
cd otp_src_23.0/

# 配置安装路径和选项
./configure --prefix=/usr/local/erlang/23.0

# 编译并安装Erlang
make && sudo make install
2.2.2 设置Erlang环境变量

安装完成后,需要将Erlang的bin目录添加到系统的PATH环境变量中,以便在任何位置使用Erlang工具。编辑 ~/.bashrc ~/.profile 文件,添加以下内容:

export PATH=$PATH:/usr/local/erlang/23.0/bin

更新环境变量:

source ~/.bashrc
2.2.3 验证Erlang安装

安装并配置好环境变量后,可以通过运行以下命令来验证Erlang是否安装成功:

erl

如果安装成功,上述命令将启动Erlang的交互式shell,显示如下信息:

Erlang/OTP 23 [erts-11.1.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

Eshell V11.1.3 (abort with ^G)
1>

现在,Erlang安装完成,可以继续安装RabbitMQ了。

通过上述步骤,Erlang被成功安装并配置在Linux系统中。下一章将介绍RabbitMQ的安装步骤,进一步构建您的消息队列服务。

3. RabbitMQ安装步骤

3.1 RabbitMQ安装包选择与下载

3.1.1 根据Linux发行版选择合适的RabbitMQ安装包

在选择RabbitMQ安装包之前,首先要确认您使用的Linux发行版。RabbitMQ支持多种Linux发行版,包括Debian、Ubuntu、CentOS、Fedora等。通常,根据您的Linux版本选择相应的RabbitMQ安装包是很重要的,因为它们可能依赖于特定版本的系统库。

例如,如果您使用的是Ubuntu,您应该下载 .deb 格式的安装包;而对于CentOS或Fedora,则应选择 .rpm 格式的安装包。使用包管理器可以简化安装和管理过程,而手动下载则需要您手动管理依赖关系和更新。

3.1.2 通过包管理器或官网下载RabbitMQ

包管理器是Linux系统中用于安装和管理软件包的工具,它们通常提供了一种简便的方法来安装RabbitMQ。以下是几种常见Linux发行版的安装命令:

对于Debian/Ubuntu系统:

wget https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey -O- | sudo apt-key add -
sudo apt-get install apt-transport-https
echo 'deb https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ focal main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt-get update
sudo apt-get install rabbitmq-server

对于CentOS系统:

wget https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sudo rpm --import rabbitmq-release-signing-key.asc
sudo rpm -Uvh https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-1-0.noarch.rpm
sudo yum-config-manager --add-repo https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch/rabbitmq-server.repo
sudo yum makecache fast
sudo yum install rabbitmq-server

如果您想从官网直接下载,可以访问RabbitMQ官网的下载页面,选择适合您系统的RPM或DEB安装包进行下载。

3.2 RabbitMQ安装与配置

3.2.1 安装RabbitMQ服务端和客户端库

在确认了安装包之后,您可以使用相应的包管理器或命令行工具来安装RabbitMQ服务端和客户端库。使用包管理器的好处之一是它会自动处理安装过程中依赖的系统库,这使得安装更为方便快捷。

对于使用 apt 的Debian或Ubuntu系统:

sudo apt-get update
sudo apt-get install rabbitmq-server

对于使用 yum 的CentOS或RedHat系统:

sudo yum install rabbitmq-server

安装完成后,您需要确保RabbitMQ的客户端库也被安装。在多数情况下,RabbitMQ服务包会一并安装所需的客户端库,但您也可以手动安装。

3.2.2 配置RabbitMQ环境变量

配置RabbitMQ环境变量可以方便您在命令行中直接调用RabbitMQ相关的命令。通常,在安装过程中,安装脚本会自动完成这一配置。但是,如果您是手动安装,可能需要手动进行配置。

在大多数Linux发行版中,您可以将以下行添加到您的 ~/.bashrc ~/.profile 文件中:

export PATH=$PATH:/usr/lib/rabbitmq/bin

添加后,别忘记重新加载配置文件:

source ~/.bashrc

这样就可以在任何目录下使用RabbitMQ命令了。

3.2.3 检查RabbitMQ安装状态

安装完成后,您应该检查RabbitMQ是否正确安装并且运行。这可以通过检查服务状态来实现。

对于Systemd管理的系统:

sudo systemctl status rabbitmq-server

对于SysVinit管理的系统:

sudo service rabbitmq-server status

如果服务正在运行,您应该看到类似于"active (running)"的消息。如果服务未能启动,请检查日志文件(通常位于 /var/log/rabbitmq/ 目录下),以确定可能导致问题的原因。

至此,您已经完成了RabbitMQ的安装和基本配置。接下来,您可以通过启动服务来确保RabbitMQ正常工作,并进行一些基本的配置来满足您的业务需求。在下一章中,我们将讨论如何启动RabbitMQ服务以及如何设置它在系统启动时自动运行。

4. RabbitMQ启动与开机启动设置

4.1 RabbitMQ服务的启动与停止

RabbitMQ提供了一组命令行工具,用于管理RabbitMQ服务器的启动和停止。掌握这些工具对于确保服务的稳定运行和在需要时进行故障排查至关重要。

4.1.1 使用命令行工具启动、停止RabbitMQ服务

在Linux环境下,可以通过RabbitMQ提供的 rabbitmq-server 命令行工具来启动和停止RabbitMQ服务。这些命令通常在具有管理员权限的用户下运行,例如通过 sudo

启动RabbitMQ服务的命令如下:

sudo rabbitmq-server start

停止RabbitMQ服务的命令如下:

sudo rabbitmq-server stop

如果需要更多控制,可以使用 rabbitmqctl 命令行工具。例如,使用 status 子命令可以检查RabbitMQ服务的状态:

sudo rabbitmqctl status
4.1.2 配置RabbitMQ开机自启

为了保证RabbitMQ服务在系统启动时自动启动,需要将其配置为系统服务。这个步骤因Linux发行版而异,但大多数现代Linux系统使用 systemd 作为其初始化系统。

首先,可以创建一个符号链接,使RabbitMQ服务管理器能够识别RabbitMQ服务:

sudo ln -s /usr/lib/rabbitmq/lib/rabbitmq_server-*/sbin/rabbitmq-server /usr/lib/systemd/system-maintainer/rabbitmq-server

然后,使用以下命令创建一个RabbitMQ服务单元文件:

sudorabbitmq-server -detached

接下来,编辑服务单元文件(位置可能因系统而异,但通常位于 /etc/systemd/system/ 目录下):

sudo nano /etc/systemd/system/rabbitmq-server.service

在文件中添加以下内容:

[Unit]
Description=RabbitMQ broker
After=network.target

[Service]
Type=simple
User=rabbitmq
Group=rabbitmq
ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server
ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl stop
Restart=always
PrivateTmp=true

[Install]
WantedBy=multi-user.target

最后,启用RabbitMQ服务,使其在启动时自动运行:

sudo systemctl enable rabbitmq-server.service

4.2 RabbitMQ运行状态监控

监控RabbitMQ服务器的运行状态对于维护消息队列服务的稳定性和性能至关重要。RabbitMQ提供了几种方式来监控服务状态。

4.2.1 查看RabbitMQ服务状态

除了前面提到的使用 rabbitmqctl status 命令查看服务状态之外,也可以通过访问RabbitMQ的Web管理界面来查看状态信息。通过默认端口 15672 访问Web管理界面(需要先进行用户认证)。状态信息包括RabbitMQ的运行时间、节点信息、连接、通道、交换器、队列的状态等。

4.2.2 监控RabbitMQ性能和资源使用情况

RabbitMQ提供了内置的性能监控功能,可以通过命令行工具来查看队列的性能指标。例如,要查看特定队列的详细统计信息,可以使用以下命令:

sudo rabbitmqctl list_queues name messages_ready messages_unacknowledged

要查看RabbitMQ的整体资源使用情况,可以通过 rabbitmqctl list_connections 命令查看当前的连接和它们的使用情况,如发送和接收的消息数、被拒绝的消息数等。

对于更详细的监控,可以使用 rabbitmq_management 插件,它提供了丰富的Web界面用于监控。通过Web界面,管理员可以看到内存和磁盘使用率、连接数、队列长度等重要指标,并且可以执行更复杂的操作,比如关闭连接或者重新排队消息等。

通过这些方法,管理员可以确保RabbitMQ的运行在最佳状态,及时发现并解决潜在问题。

5. 防火墙端口配置

5.1 端口需求分析

5.1.1 确定RabbitMQ所需开放的端口

为了确保RabbitMQ服务能够正常通信,我们需要开放一些特定的网络端口。RabbitMQ默认使用5672端口进行消息的发送和接收。如果使用了SSL,则需要开放5671端口。此外,RabbitMQ的管理界面默认使用15672端口,如果启用了此界面,也需要开放此端口以供Web访问。

要列出RabbitMQ服务需要使用的端口,可以通过查看RabbitMQ的配置文件来获得完整列表。在Linux系统中,RabbitMQ的配置文件通常位于 /etc/rabbitmq/rabbitmq.config

执行以下命令,检查配置文件内容:

cat /etc/rabbitmq/rabbitmq.config

输出示例:

[{rabbit, [
           {tcp_listeners, [5672]},
           {ssl_listeners, []},
           {loopback_users, [<<"guest">>]},
           %% 其他配置项...
         ]},
 {rabbitmq_management, [
                        {listener, [{port, 15672}]},
                        %% 其他配置项...
                      ]},
 %% 其他模块配置...
]

5.1.2 理解端口的作用及其安全性考量

每种服务所使用的端口号并不是随意分配的。互联网指派号码权威机构(IANA)负责维护一个端口号范围的分配,其中熟知端口号范围是0到1023,这些端口通常被系统级服务或一些特定应用使用。RabbitMQ所使用的端口号就位于这一范围之外。

RabbitMQ的端口配置不仅需要考虑网络通信的需求,还需重视安全性。开放不必要的端口会带来安全风险,攻击者可能会利用这些端口来尝试侵入系统。因此,在确定端口需求后,我们还需要评估这些端口的安全性,例如:

  • 对于生产环境,建议使用TLS/SSL来加密通信。
  • 应尽量限制允许连接的IP地址范围。
  • 定期审查防火墙规则,移除不必要的端口开放。

5.2 配置防火墙规则

5.2.1 使用iptables或firewalld添加规则

不同的Linux发行版可能使用不同的防火墙管理系统。iptables是一个常见的命令行工具,用于配置Linux内核防火墙规则集。而firewalld则是一个提供动态管理防火墙规则的服务。

假设你使用的是iptables,你可以执行如下命令来开放RabbitMQ所需的端口:

sudo iptables -A INPUT -p tcp -m tcp --dport 5672 -j ACCEPT
sudo iptables -A INPUT -p tcp -m tcp --dport 15672 -j ACCEPT

如果需要允许来自特定IP地址的连接,可以进一步添加规则:

sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 5672 -j ACCEPT

对于firewalld的配置,可以使用以下命令:

sudo firewall-cmd --add-port=5672/tcp --permanent
sudo firewall-cmd --add-port=15672/tcp --permanent
sudo firewall-cmd --reload

5.2.2 测试端口连通性确保配置生效

在添加了防火墙规则后,需要确保配置确实生效,并且RabbitMQ服务能够通过这些端口正常工作。可以使用 telnet nc (netcat)这样的网络工具来测试端口连通性。

使用telnet测试RabbitMQ默认端口:

telnet localhost 5672

如果配置正确,应显示类似以下消息:

Trying ::1...
Connected to localhost.
Escape character is '^]'.

通过以上步骤,我们可以确保RabbitMQ所需的网络端口已被正确配置,并且服务可以安全运行。对于生产环境,建议进一步审查和限制访问权限,只允许必要的IP地址进行通信。

6. 延迟消息交换插件配置

延迟消息是消息队列中一种重要的消息类型,允许消息在指定的延迟后才被投递到队列中。RabbitMQ通过插件的形式提供了延迟消息功能。在本章节中,我们将讨论如何在已安装的RabbitMQ环境中配置并使用延迟消息交换插件。

6.1 插件安装前提

在安装和启用延迟消息交换插件之前,需要确保RabbitMQ的版本与插件兼容,并且安装了所有必要的依赖包。

6.1.1 确认RabbitMQ版本兼容性

首先,需要确认当前安装的RabbitMQ版本是否支持延迟消息交换插件。可以通过查询RabbitMQ官方网站或使用命令行工具检查当前安装的版本。

# 查看RabbitMQ版本信息
rabbitmqctl status

根据输出的信息判断版本是否满足插件的最小版本要求。若不满足,则需要升级RabbitMQ到支持延迟消息插件的版本。

6.1.2 安装必要的依赖包

为了确保插件能够正常工作,需要安装一些系统层面的依赖包,这通常包括编译工具和开发库等。

# 安装编译工具
yum install -y make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel xmlto

# 安装RabbitMQ服务器和客户端库
yum install -y rabbitmq-server rabbitmq-libs

安装完毕后,需要重启RabbitMQ服务来确保新安装的依赖被系统识别。

# 重启RabbitMQ服务
systemctl restart rabbitmq-server

6.2 插件的启用与测试

一旦确保了版本兼容性和必要的依赖已经安装,下一步是启用延迟消息交换插件并进行简单的测试来验证其功能。

6.2.1 启用延迟消息交换插件

RabbitMQ提供了插件管理工具来启用和禁用插件。以下命令展示了如何启用延迟消息交换插件:

# 启用延迟消息交换插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

插件启用后,RabbitMQ需要被重启,以使配置生效。

# 重启RabbitMQ服务
systemctl restart rabbitmq-server

6.2.2 创建示例队列测试延迟消息功能

在确认插件已经启用并生效后,可以创建一个队列并设置相应的交换类型和参数,来测试延迟消息是否工作正常。

# 创建一个绑定至默认交换的队列
rabbitmqadmin declare queue name=delayed_queue

# 创建一个使用延迟消息交换的队列
rabbitmqadmin declare exchange name=delayed_exchange type=direct durable=true auto_delete=false arguments='{"x-delayed-type":"direct"}'
rabbitmqadmin declare binding source=delayed_exchange destination=delayed_queue routing_key=delayedRoutingKey

接下来,使用 rabbitmqadmin 工具发送一个延迟消息:

# 发送一个延迟为10秒的消息
rabbitmqadmin publish routing_key=delayedRoutingKey payload="Delayed message payload" exchange=delayed_exchange properties='{"x-delay":10000}'

发送消息后,需要在10秒后监听队列查看消息是否成功到达。

# 监听队列获取消息
rabbitmqadmin get queue=delayed_queue

如果队列中成功收到了延迟消息,则证明延迟消息交换插件配置成功。

在这一章节中,我们了解了延迟消息交换插件的安装前提,包括确认RabbitMQ版本的兼容性和安装必要的依赖包。紧接着,通过启用插件并创建一个测试示例,我们验证了延迟消息交换插件的功能。通过本章节的介绍,我们能够在生产环境中有效地利用延迟消息交换插件来满足特定的业务需求。

7. RabbitMQ详细配置信息

7.1 日志管理与维护

在RabbitMQ的运行和维护中,日志管理是一个重要的环节。它不仅帮助我们了解RabbitMQ的运行情况,还可以在出现问题时提供关键信息。因此,合理配置日志级别和格式对于系统监控和问题排查至关重要。

7.1.1 配置日志级别和格式

RabbitMQ支持多种日志级别,包括 debug , info , warning , error 等。我们可以通过修改配置文件来设置日志级别。

sudo nano /etc/rabbitmq/rabbitmq.config

在该配置文件中,可以添加以下内容来设置日志级别:

[{rabbit, [{log_levels, [{channel, info}, {connection, warning}, {cluster, error}]}]}].

此外,RabbitMQ允许我们自定义日志格式。例如,要将日志格式化为JSON,可以使用 rabbitmq_management_json 插件,并在启动RabbitMQ时设置环境变量 RABBITMQ_LOGS

RABBITMQ_LOGS=- RABBITMQ_NODENAME=my_rabbit rabbitmq-server -detached

7.1.2 日志轮转策略和备份方法

日志文件的不断增长会消耗磁盘空间,因此日志轮转策略是必要的。RabbitMQ允许使用外部工具如 logrotate 来管理日志文件。以下是一个示例配置:

sudo nano /etc/logrotate.d/rabbitmq-server
/var/log/rabbitmq/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        if [ -f /var/run/rabbitmq.pid ]; then
            /usr/lib/rabbitmq/bin/rabbitmqctl rotate_logs
        fi
    endscript
}

对于日志备份,你可能需要设置一个CRON作业定期将日志文件压缩并备份到其他存储位置:

0 3 * * * tar -czvf /path/to/backup/rabbitmq-logs-$(date +%Y%m%d).tgz /var/log/rabbitmq

7.2 用户管理与权限设置

用户管理是RabbitMQ安全策略中的核心,它允许你控制谁可以访问你的消息代理服务器,以及他们能做什么。

7.2.1 添加和管理RabbitMQ用户

添加用户可以通过命令行完成。例如,创建一个名为 user1 的新用户,密码为 password1

sudo rabbitmqctl add_user user1 password1

7.2.2 配置用户权限和角色

创建用户后,你需要为每个用户分配适当的权限。这可以通过将用户与角色关联来完成,角色定义了一组权限。RabbitMQ内置了一些角色,如 administrator monitoring 。例如,赋予用户 user1 管理员权限:

sudo rabbitmqctl set_user_tags user1 administrator

设置权限允许用户访问特定的虚拟主机,读写队列等。例如,为 user1 授予所有权限:

sudo rabbitmqctl set_permissions -p / user1 ".*" ".*" ".*"

7.2.3 安全最佳实践和访问控制列表

安全最佳实践包括使用SSL/TLS加密客户端和代理之间的通信,以及定期更改密码和清理非活动用户。访问控制列表(ACLs)提供了对不同资源的细粒度访问控制。

要使用SSL/TLS,你需要生成证书并配置RabbitMQ使用它们:

# 生成证书(示例)
openssl req -new -x509 -days 365 -nodes -out rabbitmq.pem -keyout rabbitmq-key.pem

# 配置RabbitMQ使用SSL
rabbitmqctl set_vm_memory_high_watermark absolute 1GB
rabbitmqctl set_cookie <cookie_value>
rabbitmqctl configure_port ssl 5671 rabbitmq-key.pem rabbitmq.pem

请注意,这些命令需要在RabbitMQ服务停止的状态下运行,并且对于生产环境,你还需要确保证书的有效性和安全性。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:RabbitMQ是一个开源的高级消息队列协议(AMQP)实现,基于Erlang编程语言开发,为分布式系统提供高可用性、可扩展性和可靠性。本指南介绍在Linux环境中安装RabbitMQ服务器的步骤,包括Erlang依赖的安装、RabbitMQ服务的启动和配置。同时,介绍了如何设置防火墙规则以允许外部访问,并提供了一个延迟消息交换插件的启用示例。此外,还可能包含日志查看、用户管理、虚拟主机设置和安全策略等深入信息。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值