Rabbitmq簡單使用

Rabblimq

? AMQP,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。

? 消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。 AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。 RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。

安裝

環境

CentOS Linux release 7.4.1708 (Core)

主機名:lek01

IP地址:172.16.50.104

Rabbitmq version: 3.7.3

配置erlang源

/etc/yum.repos.d/erlang.repo

[erlang]
gpgcheck=0
humanname=erlang Repository
baseurl=http://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch
name=erlang Repository

安裝

yum install https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.5/rabbitmq-server-3.7.5-1.el7.noarch.rpm -y

配置Rabbitmq(可選)

添加/etc/rabbitmq/rabbitmq-env.conf

RABBITMQ_NODENAME=rabbit@lek01

啓動

systemctl enable rabbitmq-server && systemctl start rabbitmq-server

rabbitmq-plugins enable rabbitmq_management  #啓動 web ui 插件

命令參考

語法:rabbitmqctl -n <node> -l <command> [<command options>]

-n node
-q quiet
-t timeout
-l longnames

默認 node "rabbit@server",server爲主機名稱

虛擬主機默認是 ‘’‘/’

Commands:
    # 添加用戶
    add_user <username> <password>
    # 添加虛擬主機
    add_vhost <vhost>
    # 驗證用戶密碼
    authenticate_user <username> <password>
    # 停止同步
    cancel_sync_queue [-p <vhost>] queue
    # 更改羣集節點的類型
    change_cluster_node_type <disc|ram>
    # 更改用戶密碼
    change_password <username> <password>
    # 清除參數值
    clear_global_parameter <key>
    # 清除運算策略,與clear_policy相同
    clear_operator_policy [-p <vhost>] <key>
    # 清除參數
    clear_parameter [-p <vhost>] <component_name> <key>
    # 清除密碼
    clear_password <username>
    # 清除用戶某個虛擬主機權限
    clear_permissions [-p vhost] <username>
    # 清除虛擬主機策略
    clear_policy [-p <vhost>] <key>
    clear_topic_permissions [-p vhost] <username> [<exchange>]
    clear_vhost_limits [-p <vhost>]
    close_all_connections [-p <vhost> --limit <limit>] [-n <node> --global] [--per-connection-delay <delay>] <explanation>
    close_connection <connectionpid> <explanation>
    # 顯示集羣所有節點狀態
    cluster_status
    decode value passphrase [--cipher cipher] [--hash hash] [--iterations iterations]
    # 刪除用戶
    delete_user <username>
    # 刪除虛擬主機
    delete_vhost <vhost>
    encode value passphrase [--cipher cipher] [--hash hash] [--iterations iterations]
    environment
    eval <expr>
    exec <expr> [--offline]
    force_boot
    force_reset
    forget_cluster_node [--offline] <existing_cluster_member_node>
    help <command>
    hipe_compile <directory>
    join_cluster [--disc|--ram] <existing_cluster_member_node>
    # 列出虛擬主機binding信息
    list_bindings [-p <vhost>] [<bindinginfoitem> ...]
    list_channels [<channelinfoitem> ...]
    list_ciphers
    list_connections [<connectioninfoitem> ...]
    list_consumers [-p vhost] [<consumerinfoitem> ...]
    list_exchanges [-p <vhost>] [<exchangeinfoitem> ...]
    list_global_parameters
    list_hashes
    list_operator_policies [-p <vhost>]
    list_parameters [-p <vhost>]
    list_permissions [-p <vhost>]
    list_policies [-p <vhost>]
    list_queues [-p <vhost>] [--online] [--offline] [--local] [<queueinfoitem> ...]
    list_topic_permissions [-p <vhost>]
    list_unresponsive_queues [--local] [--queue-timeout <queue-timeout>] [<unresponsiveq_ueueinfoitem> ...]
    # 列出用戶虛擬主機權限
    list_user_permissions <username>
    list_user_topic_permissions <username>
    # 列出所有用戶
    list_users
    list_vhost_limits [-p <vhost>] [--global]
    # 列出所有虛擬主機
    list_vhosts [<vhostinfoitem> ...]
    # 驗證節點狀態
    node_health_check
    # 清除隊列信息
    purge_queue [-p vhost] queue
    rename_cluster_node <oldnode1> <newnode1> [oldnode2] [newnode2] ...
    # 打印服務器運行報告
    report
    # 清空節點所有信息,包含用戶,虛擬主機等
    reset
    # 清空虛擬主機下所有信息
    restart_vhost [-p <vhost>]
    # 日誌切割
    rotate_logs
    # 設置集羣名稱
    set_cluster_name <name>
    set_disk_free_limit <disk_limit>
    set_disk_free_limit mem_relative <fraction>
    # 設置全局運行時參數
    set_global_parameter <name> <value>
    set_operator_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>
    set_parameter [-p <vhost>] <component_name> <name> <value>
    # 設置用戶虛擬主機權限
    set_permissions [-p <vhost>] <username> <conf> <write> <read>
    set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>
    set_topic_permissions [-p <vhost>] <username> <exchange> <write_pattern> <read_pattern>
    # 設置用戶標籤
    set_user_tags <username> <tag> [...]
    set_vhost_limits [-p <vhost>] <definition>
    set_vm_memory_high_watermark <fraction>
    set_vm_memory_high_watermark absolute <value>
    shutdown
    start_app
    status
    stop [<pidfile>]
    stop_app
    sync_queue [-p <vhost>] queue
    trace_off [-p <vhost>]
    trace_on [-p <vhost>]
    update_cluster_nodes <existing_cluster_member_node_to_seed_from>
    wait [<pid_file>] [--pid|-P <pid>]

python實列

準備

# 創建虛擬主機
rabbitmqctl add_vhost bbs

# 創建用戶
rabbitmqctl add_user bbs ad1211

# 添加標籤
rabbitmqctl set_user_tags bbs management

# 設置權限
rabbitmqctl  set_permissions -p bbs bbs  ".*"  ".*"  ".*"

# 安裝 python 擴展
pip install pika

消費者

# -*- coding: utf-8 -*-
__author__ = 'fan'
import pika

rabbitmq_host = '172.16.50.104'
rabbitmq_user = 'bbs'
rabbitmq_pwd = 'ad1211'
rabbitmq_vhost = 'bbs'
rabbitmq_queue = 'info'
rabbitmq_exchange = 'bbs'

rabbitmq_conn = pika.BlockingConnection(
    pika.ConnectionParameters(
        rabbitmq_host,
        credentials=pika.PlainCredentials(rabbitmq_user, rabbitmq_pwd),
        virtual_host=rabbitmq_vhost
    )
).channel()

def callback(ch, method, properties, body):
    print(" [x] %r:%r" % (method.routing_key, body))

#消費者
rabbitmq_conn.basic_consume(callback,
                      queue=rabbitmq_queue,
                      no_ack=True)

rabbitmq_conn.start_consuming()

生產者

# -*- coding: utf-8 -*-
__author__ = 'fan'

import pika
import sys

body = sys.argv[1]

rabbitmq_host = '172.16.50.104'
rabbitmq_user = 'bbs'
rabbitmq_pwd = 'ad1211'
rabbitmq_vhost = 'bbs'
rabbitmq_exchange = 'bbs'
rabbitmq_exchange_type = 'direct'
rabbitmq_quene = 'info'
rabbitmq_routing_key = 'info'

rabbitmq_conn = pika.BlockingConnection(
    pika.ConnectionParameters(
        rabbitmq_host,
        credentials=pika.PlainCredentials(rabbitmq_user, rabbitmq_pwd),
        virtual_host=rabbitmq_vhost
    )
).channel()
# 創建 exchange
rabbitmq_conn.exchange_declare(exchange=rabbitmq_exchange,exchange_type=rabbitmq_exchange_type,durable=True)
# 創建 queue
rabbitmq_conn.queue_declare(queue=rabbitmq_quene,durable=True)
# queue 與 exchange bind
rabbitmq_conn.queue_bind(queue=rabbitmq_quene,exchange=rabbitmq_exchange,routing_key=rabbitmq_routing_key)

rabbitmq_conn.basic_publish(exchange=rabbitmq_exchange,
                     routing_key=rabbitmq_routing_key,
                     body=body
                     )

運行

先運行生產者 , 在運行消費者

# python production.py "hellow word!"

# python consumption.py
 [x] 'info':'hello word'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章