第142章MessageQueuing&RPC
142.1. RabbitMQ
RabbitMQ
142.1.1. 安裝 RabbitMQ
running on 127.0.0.1 (localhost) on port 5672 (standard AMQP port).
142.1.1.1. Ubuntu
$ sudo apt-get install rabbitmq-server
142.1.1.2. CentOS
# yum install -y rabbitmq-server # chkconfig rabbitmq-server on # service rabbitmq-server start
新增使用者, 新增許可權, 刪除guest使用者
# rabbitmqctl add_user rabbit password # rabbitmqctl set_permissions -p "/" rabbit ".*" ".*" ".*" # rabbitmqctl delete_user guest
142.1.1.3. OSCM 一鍵安裝
curl -s https://raw.githubusercontent.com/oscm/shell/master/mq/rabbitmq/rabbitmq-server-3.6.10.sh | bash rabbitmqctl add_user admin admin123 rabbitmqctl set_user_tags admin administrator rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
142.1.1.4. 檢查埠
[root@netkiller ~]# ss -lnt | grep 5672 LISTEN 0 128 *:25672 *:* LISTEN 0 128 :::5672 :::*
142.1.2. rabbitmqctl – command line tool for managing a RabbitMQ broker
rabbitmqctl status
142.1.2.1. change_password
rabbitmqctl change_password admin <new_password>
142.1.2.2. list_users
# rabbitmqctl list_users Listing users ... guest [administrator] ...done.
142.1.2.3. 虛擬機器管理
$ rabbitmqctl add_vhost test $ rabbitmqctl add_user testuser password $ rabbitmqctl set_permissions -p test testuser ".*" ".*" ".*"
142.1.2.4. list_queues
# rabbitmqctl list_queues Listing queues ... amq.gen-RhBwbb9EdZ8Fgk_heGZQ2w 0 bb 0 customer 276930 demo 0 email 0 example 0 hello 1 members_id 282 new_members_id 0 q_linvo 0 real 0 ...done.
142.1.2.5. list_exchanges
# rabbitmqctl list_exchanges Listing exchanges ... direct amq.direct direct amq.fanout fanout amq.headers headers amq.match headers amq.rabbitmq.log topic amq.rabbitmq.trace topic amq.topic topic email direct ...done.
142.1.3. rabbitmq-plugins – command line tool for managing RabbitMQ broker plugins
啟用外掛
rabbitmq-plugins enable rabbitmq_management
142.1.3.1. rabbitmq_management
RabbitMQ Management HTTP API (https://cdn.rawgit.com/rabbitmq/rabbitmq-management/rabbitmq_v3_6_0/priv/www/api/index.html)
啟用外掛 Management and Monitoring 外掛
rabbitmq-plugins enable rabbitmq_management systemctl restart rabbitmq-server
# curl -u guest:guest http://localhost:15672/api/overview {"management_version":"3.3.5","statistics_level":"fine","exchange_types":[{"name":"topic","description":"AMQP topic exchange, as per the AMQP specification","enabled":true},{"name":"fanout","description":"AMQP fanout exchange, as per the AMQP specification","enabled":true},{"name":"direct","description":"AMQP direct exchange, as per the AMQP specification","enabled":true},{"name":"headers","description":"AMQP headers exchange, as per the AMQP specification","enabled":true}],"rabbitmq_version":"3.3.5","cluster_name":"rabbit@iZ623qr3xctZ","erlang_version":"R16B03-1","erlang_full_version":"Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:8:8] [async-threads:30] [hipe] [kernel-poll:true]","message_stats":{},"queue_totals":{"messages":0,"messages_details":{"rate":0.0},"messages_ready":0,"messages_ready_details":{"rate":0.0},"messages_unacknowledged":0,"messages_unacknowledged_details":{"rate":0.0}},"object_totals":{"consumers":1,"queues":3,"exchanges":10,"connections":1,"channels":1},"node":"rabbit@iZ623qr3xctZ","statistics_db_node":"rabbit@iZ623qr3xctZ","listeners":[{"node":"rabbit@iZ623qr3xctZ","protocol":"amqp","ip_address":"::","port":5672},{"node":"rabbit@iZ623qr3xctZ","protocol":"clustering","ip_address":"::","port":25672}],"contexts":[{"node":"rabbit@iZ623qr3xctZ","description":"RabbitMQ Management","path":"/","port":15672}]}
vhosts
# curl -u guest:guest http://localhost:15672/api/vhosts [{"messages":0,"messages_details":{"rate":0.0},"messages_ready":0,"messages_ready_details":{"rate":0.0},"messages_unacknowledged":0,"messages_unacknowledged_details":{"rate":0.0},"recv_oct":617,"recv_oct_details":{"rate":0.0},"send_oct":625,"send_oct_details":{"rate":0.0},"name":"/","tracing":false}]
queues
# curl -s -u guest:guest http://localhost:15672/api/queues/%2f/example | sed `s/,/, /g` {"message_stats":{"ack":817, "ack_details":{"rate":0.8}, "deliver":829, "deliver_details":{"rate":0.8}, "deliver_get":829, "deliver_get_details":{"rate":0.8}, "publish":33700, "publish_details":{"rate":22.4}, "redeliver":9, "redeliver_details":{"rate":0.0}}, "messages":32884, "messages_details":{"rate":39.2}, "messages_ready":32881, "messages_ready_details":{"rate":39.2}, "messages_unacknowledged":3, "messages_unacknowledged_details":{"rate":0.0}, "policy":"", "exclusive_consumer_tag":"", "consumers":1, "consumer_utilisation":0.00005551817727208515, "memory":34387224, "backing_queue_status":{"q1":0, "q2":0, "delta":["delta", 0, 0, 0], "q3":0, "q4":32881, "len":32881, "pending_acks":3, "target_ram_count":"infinity", "ram_msg_count":32881, "ram_ack_count":3, "next_seq_id":33700, "persistent_count":0, "avg_ingress_rate":31.071205055112543, "avg_egress_rate":0.7083061832348867, "avg_ack_ingress_rate":0.7083061832348867, "avg_ack_egress_rate":0.7083061832348867}, "state":"running", "incoming":[{"stats":{"publish":33700, "publish_details":{"rate":22.4}}, "exchange":{"name":"email", "vhost":"/"}}], "deliveries":[{"stats":{"redeliver":3, "redeliver_details":{"rate":0.0}, "deliver_get":348, "deliver_get_details":{"rate":0.8}, "deliver":348, "deliver_details":{"rate":0.8}, "ack":345, "ack_details":{"rate":0.8}}, "channel_details":{"name":"127.0.0.1:41033 -> 127.0.0.1:5672 (1)", "number":1, "connection_name":"127.0.0.1:41033 -> 127.0.0.1:5672", "peer_port":41033, "peer_host":"127.0.0.1"}}], "consumer_details":[{"channel_details":{"name":"127.0.0.1:41033 -> 127.0.0.1:5672 (1)", "number":1, "connection_name":"127.0.0.1:41033 -> 127.0.0.1:5672", "peer_port":41033, "peer_host":"127.0.0.1"}, "queue":{"name":"example", "vhost":"/"}, "consumer_tag":"amq.ctag-6BSkZzt3eWgBG5Jn2nl4QA", "exclusive":false, "ack_required":true, "prefetch_count":3, "arguments":{}}], "name":"example", "vhost":"/", "durable":true, "auto_delete":false, "arguments":{}, "node":"rabbit@iZ623qr3xctZ"}
142.1.4. Python – Pika
http://pika.github.com/
sudo apt-get install python-setuptools python-pip git-core sudo pip install pika sudo easy_install pika
142.1.5. Ruby amqp
$ sudo gem install amqp
例 142.1. Ruby on RabbitMQ
subscriber.rb
$ cat subscriber.rb require `rubygems` require `amqp` EM.run { amq = MQ.new amq.queue("logins").subscribe do |login| puts login end }
producer.rb
$ cat producer.rb require `rubygems` require `amqp` EM.run { amq = MQ.new queue = amq.queue("logins") %w[scott nic robi].each { |login| queue.publish(login) } }
test
$ ruby subscriber.rb $ ruby producer.rb
原文出處:Netkiller 系列 手札
本文作者:陳景峰
轉載請與作者聯絡,同時請務必標明文章原始出處和作者資訊及本宣告。
相關文章
- 第33章MessageQueuing&RPCUIRPC
- 第142篇:原生js實現響應式原理JS
- 讀書筆記之《現代軟體工程》第5.5章、第6章、第7章筆記軟體工程
- 第 1 章 JavaJava
- 第1章NginxNginx
- 第6章 Java APIJavaAPI
- 第3章筆記筆記
- 第4章函式函式
- 第1章 Why RustRust
- 第 6 章 表格元素
- 第 7 章 文件元素
- 第 8 章 嵌入元素
- 第1章 jQuery 起步jQuery
- 第1章jQuery起步jQuery
- 第10章MySQLConnectorsMySql
- 第14章PhpDigPHP
- 第6章minifierNifi
- 第2章 表示式
- 資料庫管理-第142期 DBA?DBA!(20240131)資料庫
- 第2章 功能實現
- 第1章 安裝RailsAI
- 第2章 Python序列Python
- 第1章 認識excelExcel
- 第15章:解析器
- Java學習第1章Java
- 第 3 章 文字元素字元
- 第 5 章 分組元素
- 第 12 章 CSS 入門CSS
- 第 1 章 Bootstrap 介紹boot
- 第4章gulpjsJS
- 第17章_反射機制反射
- Overview of Transaction Management (142)View
- 第3章 系統架構架構
- 第1章 DevOps的理想dev
- 第1章 pytest入門
- 第 22 章 備忘錄模式模式
- 第 4 章 程式計數器
- 第26章:高效字串處理字串