RabbiTMQ概述
RabbitMQ輕量級,易於在內部和雲中部署。它支持多種消息傳遞協議。RabbitMQ可以部署在分布式和聯合配置中,以滿足高規模,高可用性要求。
RabbitMQ可在許多操作系統和雲環境中運行,並為大多數流行語言提供各種開發人員工具。
RabbitMQ是一個在AMQP基礎上完成的,可復用的企業消息系統。它是由Erlang語言開發。
AMQP:Advanced Message Queue,高級消息隊列協議。他是應用層協議的一個開放標准,為面向消息的中間件設計,基於此協議的客戶端與消息中間件可傳遞消息,並不受產品、開發語言等條件的限制。
1 RabbitMQ 最初起源於金融系統,用於在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。具體特點包括:<!--more--> 2 3 可靠性(Reliability):RabbitMQ使用一些機制來保證可靠性,如持久化、傳輸確認、發布確認。 4 靈活的路由(Flexible Routing):在消息進入隊列之前,通過 Exchange 來路由消息的。 5 消息集群(Clustering):多個 RabbitMQ 服務器可以組成一個集群,形成一個邏輯 Broker 。 6 高可用(Highly Available Queues):隊列可以在集群中的機器上進行鏡像,使得在部分節點出問題的情況下隊列仍然可用。 7 多種協議(Multi-protocol):RabbitMQ支持多種消息隊列協議,比如STOMP、MQTT等。 8 多語言客戶端(Many Clients):RabbitMQ 幾乎支持所有常用語言,比如 Java、.NET、Ruby 等。 9 管理界面(Management UI):RabbitMQ 提供了一個易用的用戶界面,使得用戶可以監控和管理消息 Broker 的許多方面。 10 跟蹤機制(Tracing):如果消息異常,RabbitMQ 提供了消息跟蹤機制,使用者可以找出發生了什么。 11 插件機制(Plugin System):RabbitMQ 提供了許多插件,來從多方面進行擴展,也可以編寫自己的插件。
常用術語
1 Broker:消息隊列服務器的實體,是一個中間件應用,負責接收消息生產者的消息,然后將消息發送至消息接收者或其他的Braker 2 Exchange:消息交換機,是消息第一個到達的地方,消息通過它指定的路由規則,分發到不同的消息隊列中去。 3 Queue:消息隊列,消息通過發送和路由之后最終達到的地方,到達Queue的消息即進入邏輯上等待消費的狀態。每個消息都會被發送到一個或多個隊列。 4 Binding:綁定,它的作用就是把Exchange和Queue按照路由規則綁定起來,也就是Exchange和Queue之間的虛擬鏈接。 5 Routing Key:路由關鍵字,Exchange根據這個關鍵字進行消息投遞。 6 Virtual host:虛擬主機,是對Broker的虛擬划分,將消費者、生產者和它們依賴的AMQP相關結構進行隔離,一般都是為了安全考慮。比如:我們可以在一個Broker中設置多個虛擬主機,對不同用戶進行權限的分離。 7 Connection:連接。代表生產者、消費者、Broker之間進行通信的物理網絡。 8 Channel:消息通道,用於連接生產者和消費者的邏輯結構。在客戶端每個連接里,可建立多個Channel,每個Channel代表一個會話任務,通過Channel可以隔離同一個連接中的不同交互內容。 9 Producer:消息生產者。 10 Consumer:消息消費者。
安裝地址
RabbitMQ安裝地址
1 wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.2/rabbitmq-server-3.6.2.zip
由於RabbitMQ是erlang語言開發的所以依賴erlang語言環境先安裝erlang
注意這里看下erlang語言兼容RabbitMQ版本系列官方有說明https://www.rabbitmq.com/download.html
1 http://www.erlang.org/downloads
我這里是安裝的18.3版本的根據你要安裝的rabbitmq版本做選擇
1 wget http://erlang.org/download/otp_src_18.3.tar.gz
解壓
1 tar -xzvf otp_src_18.3.tar.gz 2 cd /opt/otp_src_18.3/
創建安裝目錄
1 mkdir /opt/erlang183
配置安裝路徑
1 ./configure --prefix=/opt/erlang183
編譯安裝
1 make && make install
配置環境變量
1 vim /etc/profile 2 添加路徑/opt/erlang183/bin
使得文件生效
1 source /etc/profile
驗證是否erlang安裝成功
RabbitMQ安裝
下載包
1 wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.2/rabbitmq-server-3.6.2.zip
下載完成需要轉換成tar文件
1 xz -d rabbitmq-server-generic-unix-3.6.2.tar.xz
解壓
1 tar -xvf rabbitmq-server-generic-unix-3.6.2.tar
添加環境變量
1 vim /etc/profile 2 把路徑添加進去/opt/rabbitmq362/sbin 3 並生效 source /etc/profile
啟動與關閉服務查看狀態
1 進入sbin 啟動服務:./rabbitmq-server -detached 2 查看服務狀態:./rabbitmqctl status 3 關閉服務:./rabbitmqctl stop
常規命令
1 #啟動服務 2 rabbitmq-server -detached 3 4 #查看幫助 5 man rabbitmq-server 6 參數解釋: 7 OPTIONS 8 -detached 后台運行 9 Start the server process in the background. Note that this will cause the pid 10 not to be written to the pid file. 11 12 rabbitmqctl status #查看rabbitmq狀態 13 14 #創建rabbitmq登錄用戶 15 添加用戶 16 rabbitmqctl add_user [username] [password] 17 添加權限 18 rabbitmqctl set_permissions -p "/" [username] ".*" ".*" ".*" 19 修改用戶角色 20 rabbitmqctl set_user_tags [username] administrator
配置網頁插件
1 RabbitMQ網頁管理的端口是15672,但是現在還不能訪問,需要添加網頁插件才能訪問 2 rabbitmq-plugins enable rabbitmq_management
在此可以查看端口狀態
1 netstat -tunlp
[root@localhost sbin]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 53825/beam.smp tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 52011/epmd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6621/sshd tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 53825/beam.smp tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 6822/master tcp6 0 0 :::5672 :::* LISTEN 53825/beam.smp tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::4369 :::* LISTEN 52011/epmd tcp6 0 0 :::22 :::* LISTEN 6621/sshd tcp6 0 0 ::1:25 :::* LISTEN 6822/master udp 0 0 0.0.0.0:68 0.0.0.0:* 6410/dhclient udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd udp 0 0 0.0.0.0:915 0.0.0.0:* 6259/rpcbind udp6 0 0 :::111 :::* 1/systemd udp6 0 0 :::915 :::* 6259/rpcbind
端口信息
1 (epmd), 25672 (Erlang distribution) 2 3 Epmd 是 Erlang Port Mapper Daemon 的縮寫,在 Erlang 集群中相當於 dns 的作用,綁定在4369端口上。 4 5 5672, 5671 (AMQP 0-9-1 without and with TLS) 6 7 AMQP 是 Advanced Message Queuing Protocol 的縮寫,一個提供統一消息服務的應用層標准高級消息隊列協議,是應用層協議的一個開放標准,專為面向消息的中間件設計。 8 基於此協議的客戶端與消息中間件之間可以傳遞消息,並不受客戶端/中間件不同產品、不同的開發語言等條件的限制。Erlang 中的實現有 RabbitMQ 等。 9 (if management plugin is enabled) 10 11 通過 http://serverip:15672 訪問 RabbitMQ 的 Web 管理界面,默認用戶名密碼都是 guest。(注意:RabbitMQ 3.0之前的版本默認端口是55672,下同) 12 13 61613, 61614 (if STOMP is enabled) 14 15 Stomp 是一個簡單的消息文本協議,它的設計核心理念就是簡單與可用性,官方文檔,實踐一下 Stomp 協議需要: 16 17 一個支持 stomp 消息協議的 messaging server (譬如activemq,rabbitmq); 18 一個終端(譬如linux shell); 19 一些基本命令與操作(譬如nc,telnet) 20 1883, 8883 (if MQTT is enabled) 21 MQTT 只是 IBM 推出的一個消息協議,基於 TCP/IP 的。兩個 App 端發送和接收消息需要中間人,這個中間人就是消息服務器(比如ActiveMQ/RabbitMQ),三者通信協議就是 MQTT
創建用戶登錄默認有個guest處於安全考慮只能在本地登錄
1 rabbitmqctl add_user admin admin123456
修改角色權限
1 rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
設置標簽
1 rabbitmqctl set_user_tags admin administrator
查看用戶訪問
1 rabbitmqctl list_permissions -p /
[root@localhost sbin]# rabbitmqctl list_permissions -p / Listing permissions in vhost "/" ... guest .* .* .* admin .* .* .*
登錄Web界面
常規命令
1 rabbitmqctl status 2 3 rabbitmqctl stop 4 5 rabbitmqctl list_users 6 7 rabbitmqctl list_user_permissions guest 8 9 rabbitmqctl add_user admin 123456 10 11 rabbitmqctl set_user_tags admin administrator 12 13 rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
rabbitmq-plugins命令
rabbitmqctl命令
1 Commands: 2 stop [<pid_file>] 3 stop_app 4 start_app 5 wait <pid_file> 6 reset 7 force_reset 8 rotate_logs <suffix> 9 10 join_cluster <clusternode> [--ram] 11 cluster_status 12 change_cluster_node_type disc | ram 13 forget_cluster_node [--offline] 14 rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...] 15 update_cluster_nodes clusternode 16 force_boot 17 sync_queue [-p <vhost>] queue 18 cancel_sync_queue [-p <vhost>] queue 19 purge_queue [-p <vhost>] queue 20 set_cluster_name name 21 22 add_user <username> <password> 23 delete_user <username> 24 change_password <username> <newpassword> 25 clear_password <username> 26 27 authenticate_user <username> <password> 28 29 set_user_tags <username> <tag> ... 30 list_users 31 32 add_vhost <vhost> 33 delete_vhost <vhost> 34 list_vhosts [<vhostinfoitem> ...] 35 set_permissions [-p <vhost>] <user> <conf> <write> <read> 36 clear_permissions [-p <vhost>] <username> 37 list_permissions [-p <vhost>] 38 list_user_permissions <username> 39 40 set_parameter [-p <vhost>] <component_name> <name> <value> 41 clear_parameter [-p <vhost>] <component_name> <key> 42 list_parameters [-p <vhost>] 43 44 set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] 45 <name> <pattern> <definition> 46 clear_policy [-p <vhost>] <name> 47 list_policies [-p <vhost>] 48 49 list_queues [-p <vhost>] [<queueinfoitem> ...] 50 list_exchanges [-p <vhost>] [<exchangeinfoitem> ...] 51 list_bindings [-p <vhost>] [<bindinginfoitem> ...] 52 list_connections [<connectioninfoitem> ...] 53 list_channels [<channelinfoitem> ...] 54 list_consumers [-p <vhost>] 55 status 56 node_health_check 57 environment 58 report 59 eval <expr> 60 61 close_connection <connectionpid> <explanation> 62 trace_on [-p <vhost>] 63 trace_off [-p <vhost>] 64 set_vm_memory_high_watermark <fraction> 65 set_vm_memory_high_watermark absolute <memory_limit> 66 set_disk_free_limit <disk_limit> 67 set_disk_free_limit mem_relative <fraction>
這篇文章也寫的不錯可以看下https://blog.csdn.net/super_rd/article/details/70327503