rabbitMQ docker安裝測試
MQ是什麼
選型
特性 | ActiveMQ | RabbitMQ | Kafka | NMQ |
---|---|---|---|---|
PRODUCER-COMSUMER | 支援 | 支援 | 支援 | - |
PUBLISH-SUBSCRIBE | 支援 | 支援 | 支援 | 支援 |
REQUEST-REPLY | 支援 | 支援 | - | 不支援 |
API完備性 | 高 | 高 | 高 | 低(靜態配置) |
多語言支援 | 支援,JAVA優先 | 語言無關 | 支援,JAVA優先 | C/C++ |
單機呑吐量 | 萬級 | 萬級 | 十萬級 | 單機萬級 |
訊息延遲 | - | 微秒級 | 毫秒級 | - |
可用性 | 高(主從) | 高(主從) | 非常高(分散式) | 非常高(分散式) |
訊息丟失 | - | 低 | 理論上不會丟失 | - |
訊息重複 | - | 可控制 | 理論上會有重複 | - |
文件的完備性 | 高 | 高 | 高 | 中 |
提供快速入門 | 有 | 有 | 有 | 無 |
首次部署難度 | - | 低 | 中 | 高 |
RabitMq 搭建
安裝
docker pull rabiitmq:3.7-alpine
執行方式
幾個注意點:
- 設定hostname, 因為rabbimq資料存放依賴node name; 而預設的節點名稱是hostname;
$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3.7-alpine
# 為持久化可在啟動時增加以下兩引數
-v "rabbitmq_log:/var/log/rabbitmq" \
-v "rabbitmq_data:/var/lib/rabbitmq" \
預設監聽埠5672;
記憶體限制
rabbitmq引數vm_memory_high_watermark, 由環境變數RABBITMQ_VM_MEMORY_HIGH_WATERMARK決定;–memory 2048m (and the implied upstream-default RABBITMQ_VM_MEMORY_HIGH_WATERMARK of 40%) will set the effective limit to 819MB (which is 40% of 2048MB).
Erlang Cookie
RabbitMQ nodes 和 CLI 命令列工具 (e.g. rabbitmqctl) 利用 cookie來決定是否允許互相通訊;
RABBITMQ_ERLANG_COOKIE 環境變數設定cookie
RABBITMQ_NODENAME 可反覆喚起rabbitmqctl
$ docker run -it --rm --link some-rabbit:my-rabbit -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -e RABBITMQ_NODENAME=[email protected]-rabbit rabbitmq:3 bash
管理外掛
帶管理外掛的rabbitmq映象
安裝
docker pull rabbitmq:3.7-management-alpine
執行
$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3.7-management-alpine
預設埠15672, 預設賬號密碼: guest / guest; 可通過RABBITMQ_DEFAULT_USER 和 RABBITMQ_DEFAULT_PASS修改;
配置
參考
- RABBITMQ_DEFAULT_VHOST 可修改vhost; vhost預設是’/’; 在多機系統時,可以有不同的vhost
- Hipe在alpine OS中有bug;
HiPE(High Performance Erlang) 霸爺有一個一語中的的描述”erlang的hipe相當於jit, 根據語言評測有hipe支援在純erlang的運算上會快2-3倍,這個效能的提升對於計算密集型的應用還是比較可觀的。”
外掛
通過docker file來檢視執行
FROM rabbitmq:3.7-alpine-management
RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp
使用
啟動服務
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 rabbitmq:3.7-management-alpine
docker logs some-rabbit
node : [email protected]
home dir : /var/lib/rabbitmq
config file(s) : /etc/rabbitmq/rabbitmq.conf
cookie hash : 9dc/v2egQn2ldwnTkb+DSg==
log(s) : <stdout>
database dir : /var/lib/rabbitmq/mnesia/[email protected]
2018-08-07 10:20:49.914 [info] <0.205.0> Memory high watermark set to 801 MiB (840700723 bytes) of 2004 MiB (2101751808 bytes) total
...
2018-08-07 10:20:49.925 [info] <0.197.0> Node database directory at /var/lib/rabbitmq/mnesia/[email protected] is empty. Assuming we need to join an existing cluster or initialise from scratch...
...
2018-08-07 10:20:50.201 [info] <0.197.0> Adding vhost '/'
2018-08-07 10:20:50.227 [info] <0.415.0> Making sure data directory '/var/lib/rabbitmq/mnesia/[email protected]/msg_stores/vhosts/628WB79CIFDYO9LJI6DKMI09L' for vhost '/' exists
2018-08-07 10:20:50.233 [info] <0.415.0> Starting message stores for vhost '/'
2018-08-07 10:20:50.233 [info] <0.419.0> Message store "628WB79CIFDYO9LJI6DKMI09L/msg_store_transient": using rabbit_msg_store_ets_index to provide index
2018-08-07 10:20:50.235 [info] <0.415.0> Started message store of type transient for vhost '/'
2018-08-07 10:20:50.236 [info] <0.422.0> Message store "628WB79CIFDYO9LJI6DKMI09L/msg_store_persistent": using rabbit_msg_store_ets_index to provide index
2018-08-07 10:20:50.237 [warning] <0.422.0> Message store "628WB79CIFDYO9LJI6DKMI09L/msg_store_persistent": rebuilding indices from scratch
2018-08-07 10:20:50.238 [info] <0.415.0> Started message store of type persistent for vhost '/'
2018-08-07 10:20:50.240 [info] <0.197.0> Creating user 'guest'
2018-08-07 10:20:50.247 [info] <0.197.0> Setting user tags for user 'guest' to [administrator]
2018-08-07 10:20:50.250 [info] <0.197.0> Setting permissions for 'guest' in '/' to '.*', '.*', '.*'
2018-08-07 10:20:50.256 [info] <0.460.0> started TCP Listener on 0.0.0.0:5672
2018-08-07 10:20:50.263 [info] <0.197.0> Setting up a table for connection tracking on this node: '[email protected]'
2018-08-07 10:20:50.269 [info] <0.197.0> Setting up a table for per-vhost connection counting on this node: '[email protected]'
python post/subscribe模型
需要Pika庫;
pip3 install pika
hello wold
publish端
# 建立連線
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 建立queue
channel.queue_declare(queue='hello')
# 訊息不能直接傳送到queue,必須經過exchange;
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
client端
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello') #可以多次呼叫,總是同一個queue (即idempotent)
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()
exchange繫結多個queue
send.py
#!/usr/bin/env python
import pika
import sys
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='logs',
exchange_type='fanout')
message = ' '.join(sys.argv[1:]) or "info: Hello World!"
channel.basic_publish(exchange='logs',
routing_key='',
body=message)
print(" [x] Sent %r" % message)
connection.close()
receive.py
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.exchange_declare(exchange='logs',
exchange_type='fanout')
result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue
channel.queue_bind(exchange='logs',
queue=queue_name)
print(' [*] Waiting for logs. To exit press CTRL+C')
def callback(ch, method, properties, body):
print(" [x] %r" % body)
channel.basic_consume(callback,
queue=queue_name,
no_ack=True)
channel.start_consuming()
AMQ 基本API
basic
basic.ack
basic.cancel
basic.consume
basic.deliver
basic.get
basic.nack
basic.publish
basic.qos
basic.recover
basic.recover-async
basic.reject
basic.return
channel
channel.close
channel.flow
channel.open
confirm
confirm.select
exchange 路由/交換
exchange.bind
exchange.declare
exchange.delete
exchange.unbind
queue 佇列
queue.bind
queue.declare
queue.delete
queue.purge
queue.unbind
tx 事物
tx.commit
tx.rollback
tx.select
許可權
參考
RabbitMQ的使用者角色分類:
none、management、policymaker、monitoring、administrator
兩種資料;
* 定義類 Definitions (Topology)
定義類資料在內部資料庫儲存,並在所有叢集節點內自動同步. 當一個節點改變時,其他節點也會同步改變; 也即備份時,從任一節點備份皆可.
- 訊息資料 Messages data
訊息資料存在訊息store區域; 對使用者透明; 使用者也不需要關心;
相關推薦
rabbitMQ docker安裝測試
MQ是什麼 選型 特性 ActiveMQ RabbitMQ Kafka NMQ PRODUCER-COMSUMER 支援 支援 支援 - PUBLISH-SUBSCRIBE 支援
Kbengine遊戲引擎-【4】demo-kbengine_unity3d_demo 在容器docker上安裝測試
目錄文件 關於 linux cnblogs 關註 容器 註意 中文 nbsp git地址:https://github.com/kbengine/kbengine_unity3d_demo Demo中文地址:https://github.com/kbengine/kbeng
DataError: [-] Error: 2, No such file or directory解決你用Django寫項目使用Docker安裝FastDFS,測試的時候遇到這個問題
安裝 tor 執行 項目 數據 docker serve error -- DataError: [-] Error: 2, No such file or directory我已經解決了 是因為我安裝storage的時候docker run -dti --network=
CentOS中利用Docker安裝RabbitMQ
html sel pan cal 控制 安裝 -h ssi add CentOS中利用Docker安裝RabbitMQ1、拉取鏡像(帶管理平臺)#docker pull rabbitmq:3.7.7-management2、啟動容器:#docker run -d --res
RabbitMQ 通過Docker方式快速安裝
首先進入RabbitMQ 官網 http://www.rabbitmq.com/download.html 找到 Docker image 並進入 這裡是最新版本 3.7.7-management,找到你需要安裝的版本, -m
Rabbitmq在docker中的安裝
docker run -d --hostname my-rabbit --name some-rabbit -p 5672:15672 rabbitmq:3.7.7-management 說明: -hostname:必須的 --name:這個可以自定義(非必須) -p 5672
使用Docker安裝部署RabbitMQ
docker search rabbitmq:management docker pull rabbitmq:management 注意:如果docker pull rabbitmq 後面不帶management,啟動rabbitmq後是無法開啟管理介面的,
Docker安裝部署RabbitMQ
1. 安裝docker加速 https://blog.csdn.net/kq1983/article/details/83041322 2. 映象查詢 docker search rabbitmq:management 3. 下載映象
docker安裝fastdfs與java客戶端測試
一、docker 安裝FastDFS 1、拉取映象 docker pull morunchang/fastdfs 2、建立並啟動tracker容器 docker run -d --name=tracker -v /home/fastdfs_docker/fdfs/tracker:/da
用Docker安裝Web前端效能測試工具YellowLabTools
一、YellowLabTools概述 1.YellowLabTools簡介 Yellow Lab Tools:是一款開源的Web前端效能測試工具,具有一些在其他工具上無法看到的獨特功能,如頁面載入時,JavaScript與DOM互動和其他程式程式碼驗證問題。 Yellow Lab Tools 偏向於一個
Docker安裝使用RabbitMQ
安裝方法: docker run -d -p 5671:5671 -p 5672:5672 -p 15672:15672 -p 15671:15671 -p 25672:25672 -v /data/rabbitmq-data/:/var/rabbitmq/lib --
一步教你Docker安裝搭建RabbitMq
1.Docker 安裝 RabbitMq a:注意獲取映象的時候要獲取management版本的,不要獲取last版本的,management版本的才帶有管理介面 #docker search rabbitmq:mana
docker安裝 hitchhiker --分散式壓力測試
hitchhiker介紹 Hitchhiker 是一款開源的 Restful Api 測試工具,支援Schedule, 資料對比,壓力測試,支援上傳指令碼定製請求,可以輕鬆部署到本地,和你的team成員一起管理Api。 下載 curl -O https://r
Docker實戰:Docker安裝部署RabbitMQ
使用Docker安裝部署RabbitMQ 1、docker search rabbitmq:management 2、docker pull rabbitmq:management 注意:如果docker pull rabbitmq 後面不帶management
Docker安裝linux系統安裝(親自測試驗證過)
1.安裝一些必要的系統工具 1.1.命令 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 1.2.sample [root@izwz91h49n3mj8r232gqwez ~]# sudo y
使用docker安裝rabbitmq及遇到的問題
今天使用docker安裝rabbitmq的時候按照參考書上的執行,但是在web的管理頁面一直無法顯示。 首先,查詢rabbitmq的映象: docker search rabbitmq. 使用第
docker安裝yapi工具管理介面和測試
YApi YApi是由去哪兒網移動架構組(簡稱YMFE,一群由FE、iOS和Android工程師共同組成的最具想象力、創造力和影響力的大前端團隊)開源的視覺化介面管理工具,一個可本地部署的、打通前後端及QA的介面管理平臺,YApi旨在為開發、產品和測試人員提供更優雅的介面管理服務,可以幫助開發者
安裝docker時測試不成功
一直想寫部落格,但是不知道從何開始寫起,那麼今天就從這個小問題開始寫起吧。記錄一下自己的學習過程。 使用Docker官網的安裝步驟安裝完成後,當我想測試一下是否安裝成功後,卻出現了下面的報錯 [email protected]:~$ sud
Docker 安裝部署RabbitMQ
這裡注意獲取映象的時候要獲取management版本的,不要獲取last版本的,management版本的才帶有管理介面。 獲查詢映象 docker search rabbitmq:management 可以看到如下結果: [[email protec
Docker 安裝 RabbitMQ
前言 RabbitMQ是一個使用非常普遍的免費訊息中介軟體,簡單高效。在Openstack中預設使用RabbitMQ作為其訊息中介軟體,以下將介紹如何在Docker上安裝RabbitMQ服務以以及如何使用和監控RabbitMQ、專案使用版本為:3.6.5。RabbitM