Springboot整合RabbitMq

RabbitMQ安装

安装erlang

由于测试环境、生产环境都是linux系统,这里模拟Linux系统安装rabbitmq,通过远程连接

下载地址:http://www.erlang.org/downloads
这里采用的是otp_src_19.1.tar.gz (200MB+)
(这里采用二进制源码包安装方式,也可使用rpm包安装简单快捷)

[root@hidden util]# tar zxvf  otp_src_19.1.tar.gz
[root@hidden util]# cd otp_src_19.1 
[root@hidden otp_src_19.1]# ./configure --prefix=/opt/erlang
[root@hidden otp_src_19.1]# make 
[root@hidden otp_src_19.1]# make install

make install出现错误,根据提示安装对应的软件即可。

修改/etc/profile文件,添加下面的环境变量:

ERLANG_HOME=/opt/erlang
export PATH=$PATH:$ERLANG_HOME/bin
export ERLANG_HOME

最后执行source /etc/profile让文件生效。

验证是否安装成功

运行如下命令,验证erlang是否安装成功。

[root@rabbitmqserver erlang]# erl

clipboard

安装simpleJson

下载地址:https://pypi.python.org/pypi/simplejson/
这里采用的是simplejson-3.10.0.tar.gz

[root@hidden util]# tar zxvf simplejson-3.10.0.tar.gz
[root@hidden util]# cd simplejson-3.10.0
[root@hidden simplejson-3.10.0]# python setup.py install
安装rabbitmq

下载地址:http://www.rabbitmq.com/releases/rabbitmq-server/
这里用的版本就有很多了,比如2.7.0, 3.4.0, 3.4.1, 3.4.2, 3.4.3, 3.5.7, 3.6.0等等,不过都是用的rabbitmq-server-generic-unix-…*.tar.gz的版本。
这里以3.5.7举例:

[root@hidden util]# tar zvxf rabbitmq-server-generic-unix-3.5.7.tar.gz -C /opt
[root@hidden util]# cd /opt
[root@hidden util]# mv rabbitmq_server-3.5.7 rabbitmq

修改/etc/profile文件,添加下面的环境变量:

export PATH=$PATH:/opt/rabbitmq/sbin

最后执行source /etc/profile让文件生效。

开启Web监控

首先,运行以下命令,开启rabbitmq

[root@rabbitmqserver rabbitmq]# rabbitmq-server start

Springboot整合RabbitMq_第1张图片
ctrl+c取消进程后,运行以下命令,开启web监控。

[root@rabbitmqserver rabbitmq]# rabbitmq-plugins enable rabbitmq_management

开启web监控之后,我们就可以正式启动rabbitmq了。

启动rabbitmq有以下两种方法。

第一种方法是,直接运行rabbitmq-server start命令。

[root@rabbitmqserver rabbitmq]# rabbitmq-server start

Springboot整合RabbitMq_第2张图片
但是这种方式,一旦终端退出后,rabbitmq服务就停止了,所以不推荐这么做。

第二种方法(需要配置成服务,且是centos6X版本的命令),运行service rabbitmq-server xxx命令。

service rabbitmq-server start #启动

service rabbitmq-server stop #停止

service rabbitmq-server restart #重启

service rabbitmq-server status #查看状态

service rabbitmq-server etc #查看有哪些命令可以使用

同时将rabbitmq-server加入到开机自启动服务中,运行以下命令:

[root@rabbitmqserver bin]# chkconfig rabbitmq-server on
最佳实践是第二种方法。

关闭服务:

[root@hadoop03 ~]# rabbitmqctl stop

查询服务状态,关闭服务后,这里unable to connect to node rabbit,是失败的

[root@hadoop03 ~]# rabbitmqctl status
Status of node rabbit@hadoop03 ...
Error: unable to connect to node rabbit@hadoop03: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@hadoop03]

rabbit@hadoop03:
  * connected to epmd (port 4369) on hadoop03
  * epmd reports: node 'rabbit' not running at all
                  no other nodes on hadoop03
  * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-20092@hadoop03'
- home dir: /root
- cookie hash: 7GfMChZo4chwYzGLy90H1w==

[root@hadoop03 ~]# 

重新启动服务,并且查看状态(如下返回,说明启动成功):

[root@hadoop03 ~]# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@hadoop03 ~]# rabbitmqctl status
Status of node rabbit@hadoop03 ...
[{pid,20537},
 {running_applications,
     [{rabbitmq_management,"RabbitMQ Management Console","3.5.7"},
      {amqp_client,"RabbitMQ AMQP Client","3.5.7"},
      {rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.5.7"},
      {webmachine,"webmachine","1.10.3-rmq3.5.7-gite9359c7"},
      {mochiweb,"MochiMedia Web Server","2.7.0-rmq3.5.7-git680dba8"},
      {rabbitmq_management_agent,"RabbitMQ Management Agent","3.5.7"},
      {rabbit,"RabbitMQ","3.5.7"},
      {os_mon,"CPO  CXC 138 46","2.4.4"},
      {inets,"INETS  CXC 138 49","6.5"},
      {xmerl,"XML parser","1.3.16"},
      {mnesia,"MNESIA  CXC 138 12","4.15.3"},
      {sasl,"SASL  CXC 138 11","3.1.1"},
      {stdlib,"ERTS  CXC 138 10","3.4.4"},
      {kernel,"ERTS  CXC 138 10","5.4.3"}]},
 {os,{unix,linux}},
 {erlang_version,
     "Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:64] [hipe] [kernel-poll:true]\n"},
 {memory,
     [{total,42173256},
      {connection_readers,0},
      {connection_writers,0},
      {connection_channels,0},
      {connection_other,5680},
      {queue_procs,2840},
      {queue_slave_procs,0},
      {plugins,306600},
      {other_proc,14049464},
      {mnesia,61024},
      {mgmt_db,63840},
      {msg_index,38400},
      {other_ets,1072544},
      {binary,14376},
      {code,17623832},
      {atom,711593},
      {other_system,8223063}]},
 {alarms,[]},
 {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
 {vm_memory_high_watermark,0.4},
 {vm_memory_limit,415753830},
 {disk_free_limit,50000000},
 {disk_free,38113390592},
 {file_descriptors,
     [{total_limit,99901},
      {total_used,3},
      {sockets_limit,89908},
      {sockets_used,1}]},
 {processes,[{limit,1048576},{used,178}]},
 {run_queue,0},
 {uptime,8}]
[root@hadoop03 ~]# 
配置rabbitmq网页管理插件
rabbitmq-plugins enable rabbitmq_management

访问页面(默认端口是15672):
Springboot整合RabbitMq_第3张图片

rabbitmq的web管理界面无法使用guest用户登录

补充:安装最新版本的rabbitmq(3.3.1),并启用management
plugin后,使用默认的账号guest登陆管理控制台,却提示登陆失败。

翻看官方的release文档后,得知由于账号guest具有所有的操作权限,并且又是默认账号,出于安全因素的考虑,guest用户只能通过localhost登陆使用,并建议修改guest用户的密码以及新建其他账号管理使用rabbitmq(该功能是在3.3.0版本引入的)。

虽然可以以比较猥琐的方式:将ebin目录下rabbit.app中loopback_users里的<<“guest”>>删除,
并重启rabbitmq,可通过任意IP使用guest账号登陆管理控制台,但始终是违背了设计者的初衷,再加上以前对这一块了解也不多,因此有必要总结一下。

  1. 用户管理

用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。

相应的命令

(1) 新增一个用户

rabbitmqctl add_user Username Password

(2) 删除一个用户

rabbitmqctl delete_user Username

(3) 修改用户的密码

rabbitmqctl change_password Username Newpassword

(4) 查看当前用户列表

rabbitmqctl list_users

  1. 用户角色

按照个人理解,用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。

(1) 超级管理员(administrator)

可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

(2) 监控者(monitoring)

可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

(3) 策略制定者(policymaker)

可登陆管理控制台(启用management plugin的情况下),同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。 与administrator的对比,administrator能看到这些内容

(4) 普通管理者(management)

仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

(5) 其他

无法登陆管理控制台,通常就是普通的生产者和消费者。

了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。

设置用户角色的命令为:

rabbitmqctl set_user_tags User Tag

User为用户名,
Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。

也可以给同一用户设置多个角色,例如

rabbitmqctl set_user_tags hncscwc monitoring policymaker

  1. 用户权限

用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。

例如:
将queue绑定到某exchange上,需要具有queue的可写权限,以及exchange的可读权限;向exchange发送消息需要具有exchange的可写权限;从queue里取数据需要具有queue的可读权限。详细请参考官方文档中"How permissions work"部分。

相关命令为:

(1) 设置用户权限

rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP

(2) 查看(指定hostpath)所有用户的权限信息

rabbitmqctl list_permissions [-p VHostPath]

(3) 查看指定用户的权限信息

rabbitmqctl list_user_permissions User

(4) 清除用户的权限信息

rabbitmqctl clear_permissions [-p VHostPath] User

开启rabbitmq远程访问

添加用户:rabbitmqctl add_user admin admin  //admin是用户名, admin是用户密码

添加权限:rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

修改用户角色:rabbitmqctl set_user_tags admin administrator

然后就可以远程访问了,然后可直接配置用户权限等信息
Springboot整合RabbitMq_第4张图片

参考借鉴了如下blog:
https://blog.csdn.net/u013256816/article/details/53524766
https://www.cnblogs.com/xrog/p/8519967.html
https://www.cnblogs.com/mcgrady/p/7614417.html
https://www.cnblogs.com/xulingjie/p/10254118.html

你可能感兴趣的:(Springboot整合RabbitMq)