1. 程式人生 > >rabbitMQ docker安裝測試

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

Rabbitmqdocker中的安裝

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