rabbitmq 集群搭建

消息队列对于处理高并发还是非常不错的选择。所以电商必然会采取这种方式。废话不多说。贴代码先。

1 .搭建环境

 Mac OS X 10.10.5   
 VMware Fusion8  
 Centos 6.7 
 rabbitmq-server-3.5.6-1.noarch.rpm 
 erlang-17.4-1.el6.x86_64.rpm
  1. rabbitmq的搭建
wget http://www.rabbitmq.com/releases/erlang/erlang-17.4-1.el6.x86_64.rpm
yum install erlang-17.4-1.el6.x86_64.rpm
  1. 安装rabbitmq
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.6/rabbitmq-server-3.5.6-1.noarch.rpm
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.5.6-1.noarch.rpm
  1. 安装rabbitmq插件
    安装RabbitMQ WebUI管理插件
rabbitmq-plugins enable rabbitmq_management
service abbitmq-server restart

打开浏览器登录http://127.0.0.1: 15672

启动RabbitMQ Server

service rabbitmq-server start
  1. 集群搭建

太啰嗦的就不说了。需要注意的我会在这里提出:

  1. 你的host需要修改 在node1代码块可以看到。如果不改变,重启 shutdown -r now
  2. 你的.erlang.cookie 也是需要修改并都保持一样。
  3. 修改配置文件的时候要注意括号。
    stop [<pid_file>] 停止服务根据进程号
    stop_app
    start_app
    wait <pid_file>   暂停
    reset             重置
    force_reset       强制重置
    rotate_logs <suffix> 日志文件 后缀

    join_cluster <clusternode> [—ram]  加入集群
    cluster_status                     集群状态
    change_cluster_node_type disc | ram  改变集群节点类型
    forget_cluster_node [--offline]      取消节点
    rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 …]  重命名节点
    update_cluster_nodes clusternode  更新节点
    force_boot                        重置引导
    sync_queue queue                  同步队列
    cancel_sync_queue queue           取消同步队列
    purge_queue queue                 清除队列
    set_cluster_name name             设置集群名称

    add_user <username> <password>    添加用户
    delete_user <username>            删除用户
    change_password <username> <newpassword>  修改密码
    clear_password <username>         清除密码
    set_user_tags <username> <tag> ...设置角色权限
    list_users                        查看所有的用户

    add_vhost <vhostpath>             添加主机
    delete_vhost <vhostpath>          删除主机
    list_vhosts [<vhostinfoitem> …]   所有主机
    set_permissions [-p <vhostpath>] <user> <conf> <write> <read>  给主机指定用户
    clear_permissions [-p <vhostpath>] <username>     清除一个主机的用户
    list_permissions [-p <vhostpath>]                 一个主机下面的绑定的用户
    list_user_permissions <username>                  用户的权限

node1:

sjk@192.168.10.73's password: 

Last login: Tue Nov  3 00:16:23 2015 from 192.168.10.14

[sjk@rabbitmq-node1 ~]$ ls

Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

[sjk@rabbitmq-node1 ~]$ cd /usr/local/

[sjk@rabbitmq-node1 local]$ ls

bin  games    jdk1.7.0_80  lib64    nginx    sbin   src     usr

etc  include  lib          libexec  openssl  share  tomcat

[sjk@rabbitmq-node1 local]$ ls

bin  games    jdk1.7.0_80  lib64    nginx    sbin   src     usr

etc  include  lib          libexec  openssl  share  tomcat

[sjk@rabbitmq-node1 local]$ cd /usr/programmer/

[sjk@rabbitmq-node1 programmer]$ ls

apache-tomcat-8.0.26.tar.gz     nginx-1.9.4.tar.gz

erlang-17.4-1.el6.x86_64.rpm    openssl-1.0.2c.tar.gz

go1.4.2.linux-amd64.tar.gz      rabbitmq-server-3.5.6-1.noarch.rpm

jdk-7u80-linux-x64.tar.gz       redis-3.0.3.tar

mongodb-linux-x86_64-3.0.6.tgz  solr-5.2.1.tgz

mongodb-osx-x86_64-3.0.6.tgz    zookeeper-3.4.6.tar.gz

nginx-1.8.0.tar.gz

[sjk@rabbitmq-node1 programmer]$ cat /etc/hosts

192.168.10.73   rabbitmq-node1.com rabbitmq-node1

192.168.10.74   rabbitmq-node2.com rabbitmq-node2

192.168.10.75   rabbitmq-node3.com rabbitmq-node3

[sjk@rabbitmq-node1 programmer]$ vim /etc/hosts

[sjk@rabbitmq-node1 programmer]$ sudo -i

[sudo] password for sjk: 

[root@rabbitmq-node1 ~]# vim /etc/hosts

[root@rabbitmq-node1 ~]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node1 ~]# cd /etc/rabbitmq/

[root@rabbitmq-node1 rabbitmq]# ls

enabled_plugins

[root@rabbitmq-node1 rabbitmq]# mv /usr/rabbitmq.config /etc/rabbitmq/

[root@rabbitmq-node1 rabbitmq]# cat /var/lib/rabbitmq/.erlang.cookie 

ATDTSAHIFSBKTQDSYKMA

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server stop

Stopping rabbitmq-server: rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# vim rabbitmq.config 

[root@rabbitmq-node1 rabbitmq]# vim /etc/rabbitmq/rabbitmq-env.conf

[root@rabbitmq-node1 rabbitmq]# vim /etc/rabbitmq/rabbitmq-env.conf

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server stop

Stopping rabbitmq-server: rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# ls

enabled_plugins  rabbitmq.config  rabbitmq-env.conf

[root@rabbitmq-node1 rabbitmq]# cat rabbitmq-env.conf 

RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq/

#需要使用的MNESIA数据库的路径

RABBITMQ_LOG_BASE=/var/log/rabbitmq/

#log的路径

RABBITMQ_PLUGINS_DIR=/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/plugins/

#插件的路径

[root@rabbitmq-node1 rabbitmq]# vim rabbitmq.config 

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server start

Starting rabbitmq-server: FAILED - check /var/log/rabbitmq/startup_{log, _err}

rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# cat /var/log/rabbitmq/startup_err 

Crash dump was written to: erl_crash.dump

could not start kernel pid (application_controller) (error in config file "/etc/rabbitmq/rabbitmq.config" (253): syntax error before: ']')

[root@rabbitmq-node1 rabbitmq]# vim rabbitmq.config 

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server stop

Stopping rabbitmq-server: rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@rabbitmq-node1' ...

[{nodes,[{disc,['rabbit@rabbitmq-node1']}]},

 {running_nodes,['rabbit@rabbitmq-node1']},

 {cluster_name,<<"rabbit@rabbitmq-node1.com">>},

 {partitions,[]}]

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl stop_app

Stopping node 'rabbit@rabbitmq-node1' ...

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl reset

Resetting node 'rabbit@rabbitmq-node1' ...

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl join_cluster rabbit@rabbitmq-node1

Clustering node 'rabbit@rabbitmq-node1' with 'rabbit@rabbitmq-node1' ...

Error: cannot_cluster_node_with_itself

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl start_app

Starting node 'rabbit@rabbitmq-node1' ...

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@rabbitmq-node1' ...

[{nodes,[{disc,['rabbit@rabbitmq-node1','rabbit@rabbitmq-node2',

                'rabbit@rabbitmq-node3']}]},

 {running_nodes,['rabbit@rabbitmq-node1']},

 {cluster_name,<<"rabbit@rabbitmq-node1.com">>},

 {partitions,[]}]

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl add_user lxc root

Creating user "lxc" ...

[root@rabbitmq-node1 rabbitmq]# rabbitmqctl set_user_tags lxc  administrator

Setting tags for user "lxc" to [administrator] ...

[root@rabbitmq-node1 rabbitmq]# 

node2:

sjk@192.168.10.74's password: 

Last login: Tue Nov  3 12:52:44 2015 from 192.168.10.14

[sjk@rabbitmq-node2 ~]$ cd /usr/local/

[sjk@rabbitmq-node2 local]$ ls

bin  games    jdk1.7.0_80  lib64    sbin   src

etc  include  lib          libexec  share  tomcat

[sjk@rabbitmq-node2 local]$ cd /usr/programmer/

[sjk@rabbitmq-node2 programmer]$ l;s

-bash: l: command not found

-bash: s: command not found

[sjk@rabbitmq-node2 programmer]$ ls

apache-tomcat-8.0.26.tar.gz     nginx-1.8.0.tar.gz

erlang-17.4-1.el6.x86_64.rpm    nginx-1.9.4.tar.gz

go1.4.2.linux-amd64.tar.gz      rabbitmq-server-3.5.6-1.noarch.rpm

jdk-7u80-linux-x64.tar.gz       redis-3.0.3.tar

mongodb-linux-x86_64-3.0.6.tgz  solr-5.2.1.tgz

mongodb-osx-x86_64-3.0.6.tgz    zookeeper-3.4.6.tar.gz

[sjk@rabbitmq-node2 programmer]$ sudo -i

[sudo] password for sjk: 

[root@rabbitmq-node2 ~]# vim /etc/hosts

[root@rabbitmq-node2 ~]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node2 ~]# cd /etc/rabbitmq/

[root@rabbitmq-node2 rabbitmq]# ls

enabled_plugins

[root@rabbitmq-node2 rabbitmq]# mv /usr/rabbitmq.config /etc/rabbitmq/

[root@rabbitmq-node2 rabbitmq]# cat /var/lib/rabbitmq/.erlang.cookie 

ATDTSAHIFSBKTQDSYKMA

[root@rabbitmq-node2 rabbitmq]# service rabbitmq-server stop

Stopping rabbitmq-server: rabbitmq-server.

[root@rabbitmq-node2 rabbitmq]# ls

enabled_plugins  rabbitmq.config

[root@rabbitmq-node2 rabbitmq]# vim rabbitmq-env.conf 

[root@rabbitmq-node2 rabbitmq]# vim rabbitmq-env.conf 

[root@rabbitmq-node2 rabbitmq]# vim rabbitmq.config 

[root@rabbitmq-node2 rabbitmq]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node2 rabbitmq]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@rabbitmq-node2' ...

[{nodes,[{disc,['rabbit@rabbitmq-node2']}]},

 {running_nodes,['rabbit@rabbitmq-node2']},

 {cluster_name,<<"rabbit@rabbitmq-node2.com">>},

 {partitions,[]}]

[root@rabbitmq-node2 rabbitmq]# rabbitmqctl stop_app

Stopping node 'rabbit@rabbitmq-node2' ...

[root@rabbitmq-node2 rabbitmq]# rabbitmqctl reset

Resetting node 'rabbit@rabbitmq-node2' ...

[root@rabbitmq-node2 rabbitmq]# rabbitmqctl join_cluster rabbit@rabbitmq-node1

Clustering node 'rabbit@rabbitmq-node2' with 'rabbit@rabbitmq-node1' ...

[root@rabbitmq-node2 rabbitmq]# 

[root@rabbitmq-node2 rabbitmq]# rabbitmqctl start_app

Starting node 'rabbit@rabbitmq-node2' ...

[root@rabbitmq-node2 rabbitmq]# 

node3:

sjk@192.168.10.75's password: 

Last login: Tue Nov  3 12:59:37 2015 from 192.168.10.14

[sjk@rabbitmq-node3 ~]$ cat /etc/rabbitmq/

cat: /etc/rabbitmq/: 是一个目录

[sjk@rabbitmq-node3 ~]$ ls

Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

[sjk@rabbitmq-node3 ~]$ sudo -i

[sudo] password for sjk: 

[root@rabbitmq-node3 ~]# vim /etc/hosts

[root@rabbitmq-node3 ~]# 

[root@rabbitmq-node3 ~]# 

[root@rabbitmq-node3 ~]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node3 ~]# cd /etc/rabbitmq/

[root@rabbitmq-node3 rabbitmq]# ls

enabled_plugins  rabbitmq.config  rabbitmq.config.example

[root@rabbitmq-node3 rabbitmq]# scp rabbitmq.config root@192.168.10.73:/usr/

The authenticity of host '192.168.10.73 (192.168.10.73)' can't be established.

RSA key fingerprint is ba:e1:f0:bd:2f:67:15:cd:50:e2:cf:df:87:01:b9:13.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.10.73' (RSA) to the list of known hosts.

root@192.168.10.73's password: 

rabbitmq.config                               100%   19KB  19.1KB/s   00:00    

[root@rabbitmq-node3 rabbitmq]# scp rabbitmq.config root@192.168.10.74:/usr/

The authenticity of host '192.168.10.74 (192.168.10.74)' can't be established.

RSA key fingerprint is ba:e1:f0:bd:2f:67:15:cd:50:e2:cf:df:87:01:b9:13.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.10.74' (RSA) to the list of known hosts.

root@192.168.10.74's password: 

rabbitmq.config                               100%   19KB  19.1KB/s   00:00    

[root@rabbitmq-node3 rabbitmq]# cat /var/lib/rabbitmq/.erlang.cookie 

ATDTSAHIFSBKTQDSYKMA

[root@rabbitmq-node3 rabbitmq]# service rabbitmq-server stop

Stopping rabbitmq-server: rabbitmq-server.

[root@rabbitmq-node3 rabbitmq]# ls

enabled_plugins  rabbitmq.config  rabbitmq.config.example

[root@rabbitmq-node3 rabbitmq]# vim rabbitmq-env.conf 

[root@rabbitmq-node3 rabbitmq]# vim rabbitmq-env.conf 

[root@rabbitmq-node3 rabbitmq]# vim rabbitmq.config

[root@rabbitmq-node3 rabbitmq]# service rabbitmq-server start

Starting rabbitmq-server: SUCCESS

rabbitmq-server.

[root@rabbitmq-node3 rabbitmq]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@rabbitmq-node3' ...

[{nodes,[{disc,['rabbit@rabbitmq-node3']}]},

 {running_nodes,['rabbit@rabbitmq-node3']},

 {cluster_name,<<"rabbit@rabbitmq-node3.com">>},

 {partitions,[]}]

[root@rabbitmq-node3 rabbitmq]# rabbitmqctl stop_app

Stopping node 'rabbit@rabbitmq-node3' ...

[root@rabbitmq-node3 rabbitmq]# rabbitmqctl reset

Resetting node 'rabbit@rabbitmq-node3' ...

[root@rabbitmq-node3 rabbitmq]# rabbitmqctl join_cluster rabbit@rabbitmq-node1

Clustering node 'rabbit@rabbitmq-node3' with 'rabbit@rabbitmq-node1' ...

Error: mnesia_not_running

[root@rabbitmq-node3 rabbitmq]# rabbitmqctl join_cluster rabbit@rabbitmq-node1

Clustering node 'rabbit@rabbitmq-node3' with 'rabbit@rabbitmq-node1' ...

[root@rabbitmq-node3 rabbitmq]# rabbitmqctl start_app

Starting node 'rabbit@rabbitmq-node3' ...

[root@rabbitmq-node3 rabbitmq]# 

rabbitmq.config 的内容:我删除了一些注释。因为So Long~

%% -*- mode: erlang -*-
%% ----------------------------------------------------------------------------
%% RabbitMQ Sample Configuration File.
%%
%% See http://www.rabbitmq.com/configure.html for details.
%% ----------------------------------------------------------------------------
[
 {rabbit,
  [
   {cluster_nodes, {[' rabbit@rabbitmq-node1', ' rabbit@rabbitmq-node2', ' rabbit@rabbitmq-node3'], disc}}
  ]},

 %% ----------------------------------------------------------------------------
 %% Advanced Erlang Networking/Clustering Options.
 %%
 %% See http://www.rabbitmq.com/clustering.html for details
 %% ----------------------------------------------------------------------------
 {kernel,
  [%% Sets the net_kernel tick time.
   %% Please see http://erlang.org/doc/man/kernel_app.html and
   %% http://www.rabbitmq.com/nettick.html for further details.
   %%
   %% {net_ticktime, 60}
  ]},

 %% ----------------------------------------------------------------------------
 %% RabbitMQ Management Plugin
 %%
 %% See http://www.rabbitmq.com/management.html for details
 %% ----------------------------------------------------------------------------

 {rabbitmq_management,
  [
{listener, [{port,     8080},
             {ip,       "0.0.0.0"},
             {ssl,     false}]} 
 ]},

 %% ----------------------------------------------------------------------------
 %% RabbitMQ Shovel Plugin
 %%
 %% See http://www.rabbitmq.com/shovel.html for details
 %% ----------------------------------------------------------------------------

 {rabbitmq_shovel,
  [{shovels,
    [
    ]}
   %% Rather than specifying some values per-shovel, you can specify
   %% them for all shovels here.
   %%
   %% {defaults, [{prefetch_count,     0},
   %%             {ack_mode,           on_confirm},
   %%             {publish_fields,     []},
   %%             {publish_properties, [{delivery_mode, 2}]},
   %%             {reconnect_delay,    2.5}]}
  ]},

 %% ----------------------------------------------------------------------------
 %% RabbitMQ Stomp Adapter
 %%
 %% See http://www.rabbitmq.com/stomp.html for details
 %% ----------------------------------------------------------------------------

 {rabbitmq_stomp,
  [
  ]},

 %% ----------------------------------------------------------------------------
 %% RabbitMQ MQTT Adapter
 %%
 %% See https://github.com/rabbitmq/rabbitmq-mqtt/blob/stable/README.md
 %% for details
 %% ----------------------------------------------------------------------------

 {rabbitmq_mqtt,
  [
  ]},

 %% ----------------------------------------------------------------------------
 %% RabbitMQ AMQP 1.0 Support
 %%
 %% See https://github.com/rabbitmq/rabbitmq-amqp1.0/blob/stable/README.md
 %% for details
 %% ----------------------------------------------------------------------------

 {rabbitmq_amqp1_0,
  [
  ]},

 %% ----------------------------------------------------------------------------
 %% RabbitMQ LDAP Plugin
 %%
 %% See http://www.rabbitmq.com/ldap.html for details.
 %%
 %% ----------------------------------------------------------------------------

 {rabbitmq_auth_backend_ldap,
  [
  ]}
].
这里写图片描述

我也借鉴了一些大神的博客。也看了官方文档。还在继续提高中~~~

欢迎光临我的个人博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容