RabbitMQ消息隊列服務部署

  • 環境介紹


OS:CentOS7.4

RabbitMQ:3.7.7

依賴環境:erlang、socat


端口介紹:

4369 ##erlang發現口

5672 ##client端通信口

15672  ##管理界面ui端口

25672  ##server間內部通信


依賴環境安裝

[root@localhost yum.repos.d]# cat a.repo 
[bbitmq-erlang] 
name=rabbitmq-erlang 
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1 
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc 
enabled=1

導入gpgcheck

[root@localhost yum.repos.d]# rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey

安裝socat

[root@localhost yum.repos.d]# yum -y install socat

下載RabbitMQ安裝包

[root@localhost ~]# wget https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
[root@localhost ~]# yum -y localinstall rabbitmq-server-3.7.7-1.el7.noarch.rpm

啓用RabbitMQ的web插件

[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.
[root@localhost ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      38383/epmd          
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1253/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1015/sshd           
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1012/cupsd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1182/master         
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      38454/beam.smp      
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::4369                 :::*                    LISTEN      38383/epmd          
tcp6       0      0 :::22                   :::*                    LISTEN      1015/sshd           
tcp6       0      0 ::1:631                 :::*                    LISTEN      1012/cupsd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1182/master         
tcp6       0      0 :::5672                 :::*                    LISTEN      38454/beam.smp

開機啓動rabbit

[root@localhost ~]# systemctl enable rabbitmq-server

啓動rabbitmq

[root@localhost ~]# systemctl restart rabbitmq-server
Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.

查看狀態

[root@localhost ~]# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2019-01-15 01:24:21 CST; 1min 19s ago
  Process: 41443 ExecStop=/usr/sbin/rabbitmqctl shutdown (code=exited, status=69)
 Main PID: 41607 (beam.smp)
   Status: "Initialized"

一般這個狀態是因爲文件".erlang.cookie"用戶和用戶組權限的問題
將該文件通過chown授權給rabbitmq

啓動rabbitmq,查看端口

[root@localhost ~]# netstat -antlp | grep 5672
tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      3641/beam.smp       
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      3641/beam.smp       
tcp        0      0 127.0.0.1:25672         127.0.0.1:56251         TIME_WAIT   -                   
tcp6       0      0 :::5672                 :::*                    LISTEN      3641/beam.smp

瀏覽器訪問測試

image.png

用戶名密碼都是guest

image.png

rabbit搭建完成!

RabbitMQ使用方法

  • 查看當前的連接

[root@localhost ~]# rabbitmqctl list__connectios
  • 列出多有隊列及隊列的消息數

[root@localhost ~]# rabbitmqctl list__queues
  • 查看當前隊列消息

[root@localhost ~]# rabbitmqctl status
Status of node rabbit@localhost ...
[{pid,3641},
...
  • 設置用戶權限爲超級管理員權限

[root@localhost ~]# rabbitmqctl set_user_tags root administartor

image.png


  • 創建虛擬機管理消息隊列

[root@localhost ~]# rabbitmqctl add_vhost read
Adding vhost "read" ...
  • 刪除虛擬機

[root@localhost ~]# rabbitmqctl delete_vhost read
  • 查看當前虛擬機

[root@localhost ~]# rabbitmqctl list_vhosts
Listing vhosts ...
/  ##默認虛擬機
read

RabbitMQ用戶管理、角色和權限管理

  • 創建用戶

[root@localhost ~]# rabbitmqctl add_user {user}root {password}123456
  • 刪除用戶

[root@localhost ~]# rabbitmqctl add_user {username}
  • 修改用戶密碼

[root@localhost ~]# rabbitmqctl change_password {username} {newpassword}
  • 查看用戶列表

[root@localhost ~]# rabbitmqctl list_users
  • 角色權限分配

[root@localhost ~]# rabbitmqctl set_user_tags {username} {tag}
    • tag用戶角色分類:none、management、policymaker、manitoring、administrator

    • tag常用角色:administrator、monitoring、management

  • 權限描述

    • none:不能訪問management plugin插件

    • administrator角色權限

      • 擁有 policymaker和monitoring的所有權限,還擁有: 創建和刪除 virtual hosts 查看、創建和刪除users 查看創建和刪除 permissions 關閉其他用戶的 connection

    • monitoring角色權限:

      • 擁有management 的所有權限,還擁有: 列出所有 virtual hosts,包括他們丌能登錄的 virtual hosts 查看其他用戶的 connections和channels 查看節點級別的數據如clustering和memory使用情冴 查看真正的關於所有 virtual hosts的全局的統計信息

    • management角色權限:

      • 列出自己可以通過AMQP登入的virtual hosts

              查看自己的vhosts中的queues,exchange和bindings

              查看和關閉自己的channels和connections

              查看有關自己的vhosts的全局的統計信息,包含其他用戶在這些vhosts中的活動

    • policymaker角色權限

      • 擁有management的所有權限,同時擁有查看、創建、刪除自己的vhosts所屬的policies(策略)和parameters(參數)

    權限設置

    [root@localhost ~]# rabbitmqctl set_permissions [-p vhostpath] {user} {conf} {write} {read}
    [root@localhost ~]# rabbitmqctl set_permissions -p /  root '.*' '.*' '.*' #設置用戶對根目錄有配置、讀、寫權限

    conf:一個正則表達式match哪些配置資源能夠被該用戶訪問

    write:哪些資源能夠被用戶寫

    read:哪些資源能夠被用戶讀

    查看(指定vhosts)所有用戶的權限信息

    [root@localhost ~]# rabbitmqctl list_permissions -p /
    Listing permissions for vhost "/" ...
    rootguest

    清除用戶的權限信息

    [root@localhost ~]# rabbitmqctl clear_permissions -p / root
    Clearing permissions for user "root" in vhost "/" ...




    使用python調用rabbitmq測試

    • 安裝py

    [root@localhost ~]# yum -y install python-pip
    • 安裝epel擴展源

    [root@localhost ~]# yum -y install epel-release
    • 更新pip

    [root@localhost ~]# pip install --upgrade pip
    • 安裝pika模塊

    [root@localhost ~]# pip install pika

    創建生產者代碼

    [root@localhost ~]# cat send.py 
    #!/bin/env python
    import pika
    #指定連接的主機參數爲localhost
    connection=pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
    #連接引導
    channel=connection.channel()
    #聲明rabbitmq的隊列BindingKey
    channel.queue_declare(queue='hello')
    #指定Exchange匹配模式,指定RoutingKey
    channel.basic_publish(exchange='',
                          routing_key='hello',
                          body='Hello World!')
    print("[x] Sent 'Hello World'")
    #關閉連接
    connection.close()

    創建消費者代碼


    [root@localhost ~]# cat receive.py 
    #!/usr/bin/env python 
    import pika 
    #指定連接的主機參數爲localhost
    connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost')) 
    #連接引導
    channel = connection.channel() 
    #聲明rabbitmq的隊列BindingKey 
    channel.queue_declare(queue='hello') 
    #指定調用的消息 
    def callback(ch, method, properties, body):     
    print(" [x] Received %r" % body) 
     
    channel.basic_consume(callback,                       
                  queue='hello',                       
                  no_ack=True) 
     
    print(' [*] Waiting for messages. To exit press CTRL+C') 
    channel.start_consuming()

    測試腳本

    [root@localhost ~]# python send.py 
    [x] Sent 'Hello World'

    查看瀏覽器,消息隊列產生了兩個(腳本執行兩次)且已處理完成

    image.png








    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章