环境:CentOS7.5
配置:

?准备基础环境:
安装最小化的系统,root密码为redhat
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33? TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR=192.168.60.130 GATEWAY=192.168.60.2 [root@localhost ~]# systemctl restart network [root@localhost ~]# systemctl stop NetworkManager && systemctl disable NetworkManager [root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld [root@localhost ~]# iptables -F [root@localhost ~]# setenforce 0 [root@localhost ~]# vi /etc/sysconfig/selinux? SELINUX=disabled [root@localhost ~]# mkdir /etc/yum.repos.d/bak [root@localhost ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/ [root@localhost ~]# vi /etc/yum.repos.d/iso.repo [cdrom] name=cdrom baseurl=file:///mnt/cdrom gpgcheck=0 enable=1 [root@localhost ~]# mkdir /mnt/cdrom [root@localhost ~]# echo '/dev/cdrom /mnt/cdrom iso9660 defaults 0 0' >>/etc/fstab? [root@localhost ~]# mount -a [root@localhost ~]# vi?/etc/yum.repos.d/CentOS-163-Base.repo? [base] name=CentOS-$releasever - Base - 163.com #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
#released updates [updates] name=CentOS-$releasever - Updates - 163.com #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful [extras] name=CentOS-$releasever - Extras - 163.com #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus - 163.com baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
[root@localhost ~]# yum repolist repolist: 26,169 [root@localhost ~]# yum install -y ntp vim net-tools tcpdump strace sysstat iotop pciutils lsof telnet lrzsz dos2unix psmisc tree wget bash-completio [root@localhost ~]# hostnamectl set-hostname allinone [root@allinone ~]# vim /etc/hosts 127.0.0.1 ? allinone ::1 ? ? ? ? allinone [root@localhost ~]# poweroff?
做快照,克隆新的虚拟机
?安装,启动服务
[root@allinone ~]# yum install epel-release -y [root@allinone ~]# yum -y install rabbitmq-server
[root@allinone ~]# systemctl start rabbitmq-server [root@allinone ~]# systemctl enable rabbitmq-server Created symlink from /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service to /usr/lib/systemd/system/rabbitmq-server.service.
### 修改guest用户密码 [root@allinone ~]# rabbitmqctl change_password guest guest Changing password for user "guest" ... ...done.
### 开启web管理插件 [root@allinone ~]# rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled: ? mochiweb ? webmachine ? rabbitmq_web_dispatch ? amqp_client ? rabbitmq_management_agent ? rabbitmq_management Plugin configuration has changed. Restart RabbitMQ for changes to take effect. [root@allinone ~]# systemctl restart rabbitmq-server
[root@allinone ~]# vim /etc/hosts 127.0.0.1 ??allinone 192.168.60.129 ??allinone
?登录web管理页面:


管理用户及权限:
[root@allinone ~]# rabbitmqctl help Usage: rabbitmqctl [-n <node>] [-q] <command> [<command options>]? [root@allinone ~]# rabbitmqctl add_user tracer redhat Creating user "tracer" ... ...done. [root@allinone ~]# rabbitmqctl set_permissions tracer ".*" ".*" ".*" Setting permissions for user "tracer" in vhost "/" ... ...done. [root@allinone ~]# rabbitmqctl list_users Listing users ... guest?? ?[administrator] tracer?? ?[] ...done.
RabbitMQ有一个可跟踪所有消息的内置功能,称为Firehose Tracer。开启后,进入系统的所有消息都将复制到amq.rabbitmq.trace这个交换(Exchange)
以下,用脚本抓取消息队列中的消息:
[root@allinone ~]# ll pika-0.10.0.tar.gz? -rw-r--r-- 1 root root 82642 Jul 27 14:58 pika-0.10.0.tar.gz [root@allinone ~]# tar -xf pika-0.10.0.tar.gz? [root@allinone ~]# cd pika-0.10.0/ [root@allinone pika-0.10.0]# python setup.py install [root@allinone pika-0.10.0]# cd [root@allinone ~]# vim rmq_trace.py #!/usr/bin/env python
''' Maintained at: https://gitlab.com/mweetman/rmq-trace '''
from __future__ import print_function import getopt import json import sys import pika
def usage(): ? print('Usage: %s OPTIONS' % sys.argv[0]) ? print('\nOPTIONS:') ? print(' [-u] (--user) ? ? ?user with permissions on amq.rabbitmq.trace exchange') ? print(' [-p] (--password) ?password for trace user') ? print(' [-t] (--target) ? ?IP RabbitMQ is bound to') ? print(' [-h] (--help) ? ? ?print this message')
def callback(ch, method, properties, body): ? print("[*] routing key: %s\n ? ?node: %s\n ? ?headers: %s\n ? ?body:\n%s\n" % ( ? ? ? method.routing_key, ? ? ? properties.headers["node"], ? ? ? properties.headers["routing_keys"], ? ? ? json.loads(body), ? ? ? ))
def main(): ? try: ? ? opts, args = getopt.getopt(sys.argv[1:], "u:p:t:h", ["user=", "password=", "target=", "help"]) ? except getopt.GetoptError as err: ? ? print(str(err)) ? ? usage() ? ? return 1 ? for opt, arg in opts: ? ? if opt in ("-u", "--user"): ? ? ? user = arg ? ? elif opt in ("-p", "--password"): ? ? ? password = arg ? ? elif opt in ("-t", "--target"): ? ? ? target = arg ? ? elif opt in ("-h", "--help"): ? ? ? usage() ? ? ? return 0 ? ? else: ? ? ? assert False, '<*> unhandled option' ? ? ? return 1
? # set defaults if unspecified ? try: ? ? user ? except: ? ? user = 'guest' ? ? print("> using 'guest' as the username")
? try: ? ? password ? except: ? ? print("> using 'guest' as the password") ? ? password = 'guest'
? try: ? ? target ? except: ? ? target = 'localhost' ? ? print("> connecting to 'localhost'")
? # connect to RabbitMQ ? credentials = pika.PlainCredentials(user, password) ? connection = pika.BlockingConnection(pika.ConnectionParameters( ? ? ? target, ? ? ? 5672, ? ? ? '/', ? ? ? credentials)) ? channel = connection.channel() ? queue_name = "firehose" ? result = channel.queue_declare(queue=queue_name, exclusive=False)
? channel.queue_bind(exchange='amq.rabbitmq.trace', ? ? ? ? ? ? ? ? ? ? ?queue=queue_name, ? ? ? ? ? ? ? ? ? ? ?routing_key="#")
? channel.basic_consume(callback, ? ? ? ? ? ? ? ? ? ? ? ? queue=queue_name, ? ? ? ? ? ? ? ? ? ? ? ? no_ack=True)
? channel.start_consuming()
if __name__ == "__main__": ? rc = main() ? exit(rc) [root@allinone ~]# ./rmq_trace.py -u tracer -p redhat -t 127.0.0.1 >/tmp/rabbit.trace
配置rabbitmqadmin工具
[root@allinone ~]# rabbitmqctl set_user_tags tracer administrator Setting tags for user "tracer" to [administrator] ... ...done. [root@allinone ~]# rabbitmqctl list_users Listing users ... guest?? ?[administrator] tracer?? ?[administrator] ...done. [root@allinone ~]# cat .rabbitmqadmin.conf [default] hostname = 127.0.0.1 port = 5672 username = tracer password = redhat
[root@allinone ~]# chmod +x /var/lib/rabbitmq/mnesia/rabbit@allinone-plugins-expand/rabbitmq_management-3.3.5/priv/www/cli/rabbitmqadmin [root@allinone ~]# /var/lib/rabbitmq/mnesia/rabbit@allinone-plugins-expand/rabbitmq_management-3.3.5/priv/www/cli/rabbitmqadmin help config Usage ===== rabbitmqadmin [options] subcommand
Configuration File ================== ?
用rabbitmqadmin工具创建exchange、queue、message
卡点:rabbitmqadmin命令报错
[root@allinone ~]# ./rabbitmqadmin list users Traceback (most recent call last): ? File "./rabbitmqadmin", line 943, in <module> ? ? main() ? File "./rabbitmqadmin", line 384, in main ? ? method() ? File "./rabbitmqadmin", line 526, in invoke_list ? ? format_list(self.get(uri), cols, obj_info, self.options) ? File "./rabbitmqadmin", line 407, in get ? ? return self.http("GET", "/api%s" % path, "") ? File "./rabbitmqadmin", line 436, in http ? ? resp = conn.getresponse() ? File "/usr/lib64/python2.7/httplib.py", line 1113, in getresponse ? ? response.begin() ? File "/usr/lib64/python2.7/httplib.py", line 444, in begin ? ? version, status, reason = self._read_status() ? File "/usr/lib64/python2.7/httplib.py", line 400, in _read_status ? ? line = self.fp.readline(_MAXLINE + 1) ? File "/usr/lib64/python2.7/socket.py", line 476, in readline ? ? data = self._sock.recv(self._rbufsize) socket.error: [Errno 104] Connection reset by peer ?
|