1. 程式人生 > 實用技巧 >RabbitMQ簡介以及安裝

RabbitMQ簡介以及安裝

1.簡介

  rabbitMQ是一種基於AMQP協議的訊息中介軟體,用Erlang語言開發。AMQP(Advanced message queuing protocol)是一個提供統一訊息服務的應用層標準協議,基於此協議的客戶端與訊息中介軟體可傳遞訊息,並不受客戶端、中介軟體等不同產品,不同開發語言等條件的限制。

  rabbitMQ最初起源於金融系統,用在分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用等方面表現不俗,具體特點包括:

1.可靠性:使用一些機制保證可靠性,如持久化、傳輸確認、釋出確認。

2.靈活的路由:在訊息進入佇列之前,通過Exchange交換機來路由訊息。對於典型的路由功能,RabbitMQ已經提供了一些內建的Exchange來實現。針對更復雜的路由功能,可以將多個Exchange繫結在一起或開發自己的Exchange。

3.訊息叢集:多個RabbitMQ組成一個叢集,形成一個邏輯的broker。

4.高可用:佇列可以在叢集中的機器上進行映象,使得在部分節點出問題的情況下佇列下仍然可用。

5.多種協議:支援多種訊息佇列協議,比如STOMP、MQTT等。

6.多語言客戶端:支援幾乎所有常用語言,比如java、rubu、.NET等。

7.管理介面:提供了一個易用的使用者介面,使得使用者可以監控和管理訊息的broker

8.跟蹤機制:如果訊息異常,rabbitMQ提供了訊息跟蹤機制,使用者可以找出發生了什麼。

2.RabbitMQ安裝

erlang官網:https://www.erlang.com/

rabbitmq官網:

https://www.rabbitmq.com/

  採用windows環境的docker安裝。也可以用linux環境的docker安裝。如果是手動安裝的話需要安裝erlang環境和rabbitmq。

1.檢視docker版本

C:\Users\liqiang>docker -v
Docker version 18.01.0-ce, build 03596f51b1

2.docker安裝rabbitmq

docker pull hub.c.163.com/library/rabbitmq:management

3.執行映象

(1)預設guest 使用者,密碼也是 guest

docker run -d --hostname
my-rabbit --name rabbit -p 15672:15672 hub.c.163.com/library/rabbitmq:management

(2)設定使用者名稱和密碼 zs/111222

docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=zs -e RABBITMQ_DEFAULT_PASS=111222 -p 15672:15672 hub.c.163.com/library/rabbitmq:management

4.訪問登入:

  上management控制檯可以看到CPU相關資訊。後期主要關注的tab是Exchanges交換機和Queues佇列。Admin使用者管理使用者,可以新增和刪除使用者以及對使用者賦權。

由於我是windows虛擬的docker機器,所有虛擬機器地址,可以通過如下命令檢視:

C:\Users\liqiang>docker-machine ip default
192.168.99.100

3.rabbitmq簡單使用

下面的命令都是基於rabbit命令執行,需要先進入docker容器:

(1)docker ps -a 檢視容器ID為:d65feaa67533

(2)進入容器

$ docker exec -it d6 /bin/bash

1.rabbitmq外掛管理-management外掛實際是15672埠看到的介面

rabbitmq-plugins用於管理外掛,用法如下:

root@my-rabbit:/# rabbitmq-plugins
Error: could not recognise command
Usage:
rabbitmq-plugins [-n <node>] <command> [<command options>]

Commands:
    list [-v] [-m] [-E] [-e] [<pattern>]
    enable [--offline] [--online] <plugin> ...
    disable [--offline] [--online] <plugin> ...
    set [--offline] [--online] <plugin> ...

(1) 檢視外掛

root@my-rabbit:/# rabbitmq-plugins list | grep management
[  ] rabbitmq_federation_management    3.6.11
[E*] rabbitmq_management               3.6.11
[e*] rabbitmq_management_agent         3.6.11
[  ] rabbitmq_management_visualiser    3.6.11
[  ] rabbitmq_shovel_management        3.6.11

(2)禁用外掛rabbitmq_management(這個外掛實際負責web介面展示)

root@my-rabbit:/# rabbitmq-plugins disable rabbitmq_management
The following plugins have been disabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@my-rabbit... stopped 6 plugins.

  禁用之後訪問15672埠會訪問不到。

(3)啟用外掛rabbitmq_management

rabbitmq-plugins enable rabbitmq_management

  啟用之後又可以訪問15672埠。

2.使用者管理

1.新增使用者

root@my-rabbit:/# rabbitmqctl add_user root 123456
Creating user "root"

2.修改密碼

root@my-rabbit:/# rabbitmqctl change_password root 111222
Changing password for user "root"

3.修改角色:

語法如下:

rabbitmqctl set_user_tags {username} {tag}

例如:

root@my-rabbit:/# rabbitmqctl set_user_tags root administrator monitoring
Setting tags for user "root" to [administrator,monitoring]

rabbitmq的角色包括:none、management、policymaker、monitoring、administrator

(1)none: 不能訪問 management plugin

(2)management:

使用者可以通過AMQP做的任何事外加:

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

  檢視自己的virtual hosts中的queues, exchanges 和 bindings

  檢視和關閉自己的channels 和 connections

  檢視有關自己的virtual hosts的“全域性”的統計資訊,包含其他使用者在這些virtual hosts中的活動。

(3)policymaker

management可以做的任何事外加:

  檢視、建立和刪除自己的virtual hosts所屬的policies和parameters

(4)monitoring

management可以做的任何事外加:

  列出所有virtual hosts,包括他們不能登入的virtual hosts

  檢視其他使用者的connections和channels

  檢視節點級別的資料如clustering和memory使用情況

  檢視真正的關於所有virtual hosts的全域性的統計資訊

(5)administrator

policymaker和monitoring可以做的任何事外加:

  建立和刪除virtual hosts

  檢視、建立和刪除users

  檢視建立和刪除permissions

  關閉其他使用者的connections

4.刪除使用者

root@my-rabbit:/# rabbitmqctl delete_user root
Deleting user "root"

3.rabbitMQ許可權管理

  使用者許可權指的是使用者對exchange,queue的操作許可權,包括配置許可權,讀寫許可權。配置許可權會影響到exchange,queue的宣告和刪除。讀寫許可權影響到從queue裡取訊息,向exchange傳送訊息以及queue和exchange的繫結(bind)操作。

1.授權命令

rabbitmqctl  set_permissions  [-p  VHostPath] {User}  {ConfP}  {WriteP}  {ReadP}

-pVHostPath:用於指定使用者一個資源的名稱空間,例如/表示根路徑名稱空間。可以理解為檔案系統的路徑。

user:需要賦權的使用者

confP:一個正則表示式match哪些配置資源能被該使用者配置

writeP:一個正則表示式match哪些配置資源能被該使用者寫

readP:一個正則表示式match哪些配置資源能被該使用者讀

例如:

rabbitmqctl  set_permissions  -p / root '.*' '.*' '.*'

2.檢視使用者許可權:

rabbitmqctl  list_permissions  [vhostpath]

例如:

(1)檢視根路徑下所有使用者許可權

rabbitmqctl  list_permissions

(2)檢視vhost為abc的所有使用者許可權

rabbitmqctl  list_permissions -p abc

3.檢視使用者的許可權

rabbitmqctl  list_user_permissions zs

4. vhost管理

vhost本質上是一個mini版的RabbitMQ伺服器,擁有自己的佇列、繫結、交換器和許可權控制;

vhost通過在各個例項間提供邏輯上分離,允許你為不同應用程式安全保密地執行資料;

vhost是AMQP概念的基礎,必須在連線時進行指定,RabbitMQ包含了預設vhost:“/”;

當在RabbitMQ中建立一個使用者時,使用者通常會被指派給至少一個vhost,並且只能訪問被指派vhost內的佇列、交換器和繫結,vhost之間是絕對隔離的。

root@my-rabbit:/# rabbitmqctl list_vhosts  #檢視vhost
Listing vhosts
/
root@my-rabbit:/# rabbitmqctl add_vhost abc  #新增vhost
Creating vhost "abc"
root@my-rabbit:/# rabbitmqctl list_vhosts
Listing vhosts
abc
/
root@my-rabbit:/# rabbitmqctl delete_vhost abc  #刪除vhost
Deleting vhost "abc"

補充:今天我在windows的docker環境下docker info的時候報錯

error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.35/info: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.

解決辦法:

(1)在git bash中執行:

$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\liqiang\.docker\machine\machines\default"
export DOCKER_MACHINE_NAME="default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("E:\docker\Docker Toolbox\docker-machine.exe" env default)

(2)cmd視窗執行:

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\liqiang\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true

補充:management管理端介面也可以進行上面的新增使用者,新增vhost等操作