国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MQ 簡(jiǎn)介-RabbitMQ

這篇具有很好參考價(jià)值的文章主要介紹了MQ 簡(jiǎn)介-RabbitMQ。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一. MQ 簡(jiǎn)介

消息隊(duì)列作為高并發(fā)系統(tǒng)的核心組件之一,能夠幫助業(yè)務(wù)系統(tǒng)結(jié)構(gòu)提升開(kāi)發(fā)效率和系統(tǒng)
穩(wěn)定性,消息隊(duì)列主要具有以下特點(diǎn):

  • 削峰填谷:主要解決瞬時(shí)寫(xiě)壓力大于應(yīng)用服務(wù)能力導(dǎo)致消息丟失、系統(tǒng)奔潰等問(wèn)題
  • 系統(tǒng)解耦:解決不同重要程度、不同能力級(jí)別系統(tǒng)之間依賴(lài)導(dǎo)致一死全死
  • 提升性能:當(dāng)存在一對(duì)多調(diào)用時(shí),可以發(fā)一條消息給消息系統(tǒng),讓消息系統(tǒng)通知相關(guān)系統(tǒng)
  • 蓄流壓測(cè):線(xiàn)上有些鏈路不好壓測(cè),可以通過(guò)堆積一定量消息再放開(kāi)來(lái)壓測(cè)

目前主流的消息隊(duì)列軟件有 RabbitMQ、kafka、ActiveMQ、RocketMQ 等,還有小眾的
消息隊(duì)列軟件如 ZeroMQ、Apache Qpid 等。

二. RabbitMQ

2.1 RabbitMQ 簡(jiǎn)介

RabbitMQ 官網(wǎng)

阿里云消息隊(duì)列產(chǎn)品

Message Queue 的需求由來(lái)已久,在 19 世紀(jì) 80 年代金融交易中,美國(guó)高盛等公
司采用 Teknekron 公司的產(chǎn)品,當(dāng)時(shí)的 Message queuing 軟件叫做(the information
bus(TIB),后來(lái) TIB 被電信和通訊等公司采用,然后路透社收購(gòu)了 Teknekron 公
司,再然后 IBM 公司開(kāi)發(fā)了 MQSeries,并且微軟也開(kāi)發(fā)了 Microsoft Message
Queue(MSMQ),但是這些商業(yè) MQ 供應(yīng)商的問(wèn)題是廠(chǎng)商鎖定及使用價(jià)格高昂,
于是 2001 年,Java Message queuing 試圖解決鎖定和交互性的問(wèn)題,但對(duì)應(yīng)用來(lái)
說(shuō)反而更加麻煩了,于是 2004 年,摩根大通和 iMatrix 開(kāi)始著手 Advanced Message
Queuing Protocol (AMQP)開(kāi)放標(biāo)準(zhǔn)的開(kāi)發(fā),2006 年,AMQP 規(guī)范發(fā)布,2007
年,Rabbit 技術(shù)公司基于 AMQP 標(biāo)準(zhǔn)開(kāi)發(fā)的 RabbitMQ 1.0 發(fā)布。

路透社:
(Reuters,LSE:RTR,NASDAQ: RTRSY)是世界上最早創(chuàng)辦的通訊社之一,也是目前英國(guó)最大的
通訊社和西方四大通訊社之一,路透社是世界前三大的多媒體新聞通訊社,提供各類(lèi)新聞和金融
數(shù)據(jù),在128個(gè)國(guó)家運(yùn)行。

摩根大通集團(tuán):
業(yè)界稱(chēng)西摩或小摩,總部位于美國(guó)紐約,總資產(chǎn)2.5萬(wàn)億美元,總存款1.5萬(wàn)億美
元,占美國(guó)存款總額的25%,分行6000多家,是美國(guó)最大金融服務(wù)機(jī)構(gòu)之一。

iMatrix:
是一個(gè)企業(yè)級(jí)的JAVA快速開(kāi)發(fā)平臺(tái)。

RabbitMQ 采用 Erlang 語(yǔ)言開(kāi)發(fā),Erlang 語(yǔ)言由 Ericson 設(shè)計(jì),Erlang 在分布式編
程和故障恢復(fù)方面表現(xiàn)出色,電信領(lǐng)域被廣泛使用。

2.2 RabbitMQ 組件介紹

  • Broker: 接收和分發(fā)消息的應(yīng)用,RabbitMQ Server 就是 Message Broker

  • Virtual host: 出于多租戶(hù)和安全因素設(shè)計(jì)的,把 AMQP 的基本組件劃分到一個(gè)虛
    擬的分組中,類(lèi)似于網(wǎng)絡(luò)中的 namespace 概念,當(dāng)多個(gè)不同的用戶(hù)使用同一個(gè)
    RabbitMQ server 提供的服務(wù)時(shí),可以劃分出多個(gè) vhost,每個(gè)用戶(hù)在自己的 vhost
    創(chuàng)建 exchange/queue 等。

  • Connection: publisher/consumer 和 broker 之間的 TCP 連接。

  • Channel: 如果每一次訪(fǎng)問(wèn) RabbitMQ 都建立一個(gè) Connection,在消息量大的時(shí)候
    建立 TCP Connection 的開(kāi)銷(xiāo)將是巨大的,效率也較低。Channel 是在 connection
    內(nèi)部建立的邏輯連接,如果應(yīng)用程序支持多線(xiàn)程,通常每個(gè) thread 創(chuàng)建單獨(dú)的
    channel 進(jìn)行通訊,AMQP method 包含了 channel id 幫助客戶(hù)端和 message broker
    識(shí)別 channel,所以 channel 之間是完全隔離的。Channel 作為輕量級(jí)的 Connection
    極大減少了操作系統(tǒng)建立 TCP connection 的開(kāi)銷(xiāo)。

  • Exchange: message 到達(dá) broker 的第一站,根據(jù)分發(fā)規(guī)則,匹配查詢(xún)表中的 routing
    key,分發(fā)消息到 queue 中去。常用的類(lèi)型有:direct (point-to-point), topic (publish-
    subscribe) and fanout (multicast)。

  • Queue: 消息最終被送到這里等待 consumer 取走。

  • Binding: exchange 和 queue 之間的虛擬連接,binding 中可以包含 routing key。
    Binding 信息被保存到 exchange 中的查詢(xún)表中,用于 message 的分發(fā)依據(jù)。

2.3 RabbitMQ 單機(jī)部署

2.3.1 添加主機(jī)名解析

RabbitMQ 強(qiáng)制要求安裝其的主機(jī)名可以解析。

root@rabbit-server-node1:~# vim /etc/hosts
...
192.168.100.160 rabbit-server rabbit-server.suosuoli.cn

root@rabbit-server-node1:~# ping rabbit-server
PING rabbit-server (192.168.100.160) 56(84) bytes of data.
64 bytes from rabbit-server (192.168.100.160): icmp_seq=1 ttl=64 time=0.010 ms
^C
--- rabbit-server ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.010/0.010/0.010/0.000 ms
root@rabbit-server-node1:~# ping rabbit-server.suosuoli.cn
PING rabbit-server (192.168.100.160) 56(84) bytes of data.
64 bytes from rabbit-server (192.168.100.160): icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from rabbit-server (192.168.100.160): icmp_seq=2 ttl=64 time=0.023 ms
^C
--- rabbit-server ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1015ms
rtt min/avg/max/mdev = 0.010/0.016/0.023/0.007 ms

2.3.2 安裝 RabbitMQ

快速安裝參考

# 使用官方的快速安裝例子
root@rabbit-server-node1:~# vim install_rabbit.sh

#!/bin/sh

## If sudo is not available on the system,
## uncomment the line below to install it
# apt-get install -y sudo

sudo apt-get update -y

## Install prerequisites
sudo apt-get install curl gnupg -y

## Install RabbitMQ signing key
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -

## Install apt HTTPS transport
sudo apt-get install apt-transport-https

## Add Bintray repositories that provision latest RabbitMQ and Erlang 21.x releases
sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list <<EOF
## Installs the latest Erlang 22.x release.
## Change component to "erlang-21.x" to install the latest 21.x version.
## "bionic" as distribution name should work for any later Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb https://dl.bintray.com/rabbitmq-erlang/debian bionic erlang
deb https://dl.bintray.com/rabbitmq/debian bionic main
EOF

## Update package indices
sudo apt-get update -y

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

# 安裝
root@rabbit-server-node1:~# bash install_rabbit.sh
...
Created symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service → /lib/systemd/system/rabbitmq-server.service.
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.24) ...
# 安裝OK

2.3.3 啟動(dòng) RabbitMQ

# 在ubuntu下,會(huì)自動(dòng)啟動(dòng)
root@rabbit-server-node1:~# systemctl status rabbitmq-server
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-03-24 16:57:51 CST; 5min ago
 Main PID: 4946 (beam.smp)
 ...
# 開(kāi)機(jī)啟動(dòng)
root@rabbit-server-node1:~# systemctl enable rabbitmq-server
Synchronizing state of rabbitmq-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable rabbitmq-server

root@rabbit-server-node1:~# ps -ef | grep rabbit
rabbitmq   4946      1  0 16:57 ?        00:00:06 /usr/lib/erlang/erts-10.7/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.3/ebin  -noshell -noinput -s rabbit boot -sname rabbit@rabbit-server-node1 -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit lager_log_root "/var/lograbbitmq" -rabbit lager_default_file "/var/log/rabbitmq/rabbit@rabbit-server-node1.log" -rabbit lager_upgrade_file "/var/log/rabbitmq/rabbit@rabbit-server-node1_upgrade.log" -rabbit feature_flags_file "/var/lib/rabbitmq/mnesia/rabbit@rabbit-server-node1-feature_flags" -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/plugins:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.3/plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@rabbit-server-node1-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@rabbit-server-node1" -ra data_dir "/var/lib/rabbitmq/mnesia/rabbit@rabbit-server-node1/quorum" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672 --
rabbitmq   5041      1  0 16:57 ?        00:00:00 /usr/lib/erlang/erts-10.7/bin/epmd -daemon
rabbitmq   5191   4946  0 16:57 ?        00:00:00 erl_child_setup 32768
rabbitmq   5216   5191  0 16:57 ?        00:00:00 inet_gethost 4
rabbitmq   5217   5216  0 16:57 ?        00:00:00 inet_gethost 4
root       5879   1136  0 17:10 pts/0    00:00:00 grep --color=auto rabbit

root@rabbit-server-node1:~# lsof -i:15672
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
beam.smp 4946 rabbitmq   94u  IPv4  43507      0t0  TCP *:15672 (LISTEN)

2.3.4 開(kāi)啟 WEB 管理插件

root@rabbit-server-node1:~# rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@rabbit-server-node1
 |/
[  ] rabbitmq_amqp1_0                  3.8.3
[  ] rabbitmq_auth_backend_cache       3.8.3
[  ] rabbitmq_auth_backend_http        3.8.3
[  ] rabbitmq_auth_backend_ldap        3.8.3
...
[  ] rabbitmq_management               3.8.3
...

root@rabbit-server-node1:~# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@rabbit-server-node1:
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbit-server-node1...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

2.3.5 登錄管理界面

rabbitmq 從 3.3.0 開(kāi)始禁止使用 guest/guest 權(quán)限通過(guò)除 localhost 外的訪(fǎng)問(wèn),直
接訪(fǎng)問(wèn)報(bào)錯(cuò)如下:

用戶(hù)名和密碼都是:guest
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-ybwWX2xJ-1692948000972)(png/2020-03-24-17-14-00.png)]

提示:用戶(hù)只能在安裝 rabbitmq 的服務(wù)器登錄。

修改配置文件,允許從其他主機(jī)登錄管理界面;

root@rabbit-server-node1:~# vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.3/ebin/rabbit.app
...
 39             {loopback_users, []},  # 去掉double尖括號(hào)及其內(nèi)容
...
root@rabbit-server-node1:~# systemctl restart rabbitmq-server.service

OK

2.4 RabbitMQ 集群部署

RabbitMQ 集群工作模式有兩種:

  • 普通模式:創(chuàng)建好 RabbitMQ 之后的默認(rèn)模式。
    普通集群模式:queue 創(chuàng)建之后,如果沒(méi)有其它 policy,消息實(shí)體只存在于其中
    一個(gè)節(jié)點(diǎn),A、B 兩個(gè) Rabbitmq 節(jié)點(diǎn)僅有相同的元數(shù)據(jù),即隊(duì)列結(jié)構(gòu),但隊(duì)列的
    數(shù)據(jù)僅保存有一份,即在創(chuàng)建該隊(duì)列的 rabbitmq 節(jié)點(diǎn)(A 節(jié)點(diǎn))上,當(dāng)消息進(jìn)入
    A 節(jié)點(diǎn)的 Queue 中后,consumer 從 B 節(jié)點(diǎn)拉取時(shí),RabbitMQ 會(huì)臨時(shí)在 A、B
    間進(jìn)行消息傳輸,把 A 中的消息實(shí)體取出并經(jīng)過(guò) B 發(fā)送給 consumer,所以
    consumer 可以連接每一個(gè)節(jié)點(diǎn),從中取消息,該模式存在一個(gè)問(wèn)題就是當(dāng) A 節(jié)點(diǎn)
    故障后,B 節(jié)點(diǎn)無(wú)法取到 A 節(jié)點(diǎn)中還未消費(fèi)的消息實(shí)體。

  • 鏡像模式:把需要的隊(duì)列做成鏡像隊(duì)列。
    鏡像集群模式:把需要的隊(duì)列做成鏡像隊(duì)列,存在于多個(gè)節(jié)點(diǎn),屬于 RabbitMQ 的
    HA 方案(鏡像模式是在普通模式的基礎(chǔ)上,增加一些鏡像策略)該模式解決了上述
    問(wèn)題,其實(shí)質(zhì)和普通模式不同之處在于,消息實(shí)體會(huì)主動(dòng)在鏡像節(jié)點(diǎn)間同步,而不
    是在 consumer 取數(shù)據(jù)時(shí)臨時(shí)拉取。該模式帶來(lái)的副作用也很明顯,除了降低系統(tǒng)
    性能外,如果鏡像隊(duì)列數(shù)量過(guò)多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會(huì)
    被這種同步通訊大大消耗掉。所以在對(duì)可靠性要求較高的場(chǎng)合中適用,一個(gè)隊(duì)列想
    做成鏡像隊(duì)列,需要先設(shè)置 policy,然后客戶(hù)端創(chuàng)建隊(duì)列的時(shí)候,rabbitmq 集群
    根據(jù)“隊(duì)列名稱(chēng)”自動(dòng)設(shè)置是普通集群模式或鏡像隊(duì)列。

  • 集群中有兩種節(jié)點(diǎn)類(lèi)型:

    • 內(nèi)存節(jié)點(diǎn):只將數(shù)據(jù)保存到內(nèi)存
    • 磁盤(pán)節(jié)點(diǎn):保存數(shù)據(jù)到內(nèi)存和磁盤(pán)。
      內(nèi)存節(jié)點(diǎn)雖然不寫(xiě)入磁盤(pán),但是它執(zhí)行比磁盤(pán)節(jié)點(diǎn)要好,集群中,只需要一個(gè)
      磁盤(pán)節(jié)點(diǎn)來(lái)保存數(shù)據(jù)就足夠了如果集群中只有內(nèi)存節(jié)點(diǎn),那么不能全部停止它
      們,否則所有數(shù)據(jù)消息在服務(wù)器全部停機(jī)之后都會(huì)丟失。
  • 推薦的架構(gòu)設(shè)計(jì)
    在一個(gè) rabbitmq 集群里,有 3 臺(tái)或以上機(jī)器,其中 1 臺(tái)使用磁盤(pán)模式,其它節(jié)
    點(diǎn)使用內(nèi)存模式,內(nèi)存節(jié)點(diǎn)訪(fǎng)問(wèn)速度更快,由于磁盤(pán) IO 相對(duì)較慢,因此可作
    為數(shù)據(jù)備份使用

2.4.1 環(huán)境

主機(jī)列表:

主機(jī)名 IP
rabbit-server-node1 192.168.100.160
rabbit-server-node2 192.168.100.162
rabbit-server-node3 192.168.100.164

主機(jī)域名解析:

root@rabbit-server-node1:~# vim /etc/hosts
root@rabbit-server-node1:~# cat /etc/hosts
192.168.100.160 rabbit-server-node1 rabbit-server1.suosuoli.cn
192.168.100.162 rabbit-server-node1 rabbit-server2.suosuoli.cn
192.168.100.164 rabbit-server-node1 rabbit-server3.suosuoli.cn

# 分發(fā)到其它主機(jī)
root@rabbit-server-node1:~# scp /etc/hosts 192.168.100.162:/etc/
root@192.168.100.162's password:
hosts                     100%  189   347.4KB/s   00:00

root@rabbit-server-node1:~# scp /etc/hosts 192.168.100.164:/etc/
root@192.168.100.164's password:
hosts                     100%  189   347.4KB/s   00:00

# 確認(rèn)一下
root@rabbit-server-node2:~# cat /etc/hosts
192.168.100.160 rabbit-server-node1 rabbit-server1.suosuoli.cn
192.168.100.162 rabbit-server-node1 rabbit-server2.suosuoli.cn
192.168.100.164 rabbit-server-node1 rabbit-server3.suosuoli.cn

root@rabbit-server-node3:~# cat /etc/hosts
192.168.100.160 rabbit-server-node1 rabbit-server1.suosuoli.cn
192.168.100.162 rabbit-server-node1 rabbit-server2.suosuoli.cn
192.168.100.164 rabbit-server-node1 rabbit-server3.suosuoli.cn

2.4.2 在各主機(jī)安裝 RabbitMQ

# 使用官方的快速安裝例子
root@rabbit-server-nodeX:~# vim install_rabbit.sh

#!/bin/sh

## If sudo is not available on the system,
## uncomment the line below to install it
# apt-get install -y sudo

sudo apt-get update -y

## Install prerequisites
sudo apt-get install curl gnupg -y

## Install RabbitMQ signing key
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo apt-key add -

## Install apt HTTPS transport
sudo apt-get install apt-transport-https

## Add Bintray repositories that provision latest RabbitMQ and Erlang 21.x releases
sudo tee /etc/apt/sources.list.d/bintray.rabbitmq.list <<EOF
## Installs the latest Erlang 22.x release.
## Change component to "erlang-21.x" to install the latest 21.x version.
## "bionic" as distribution name should work for any later Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb https://dl.bintray.com/rabbitmq-erlang/debian bionic erlang
deb https://dl.bintray.com/rabbitmq/debian bionic main
EOF

## Update package indices
sudo apt-get update -y

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

# 安裝
root@rabbit-server-nodeX:~# bash install_rabbit.sh
...
Created symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service → /lib/systemd/system/rabbitmq-server.service.
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for systemd (237-3ubuntu10.24) ...
# 安裝OK

2.4.3 啟動(dòng) RabbitMQ

~# systemctl restart rabbitmq-server
~# systemctl enable rabbitmq-server

2.4.4 創(chuàng)建 RabbitMQ 集群

Rabbitmq 的集群是依賴(lài)于 erlang 的集群來(lái)工作的,所以必須先構(gòu)建起 erlang 的
集群環(huán)境,而 Erlang 的集群中各節(jié)點(diǎn)是通過(guò)一個(gè) magic cookie 來(lái)實(shí)現(xiàn)的,這個(gè)
cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 文件中,文件是 400 的
權(quán)限,所以必須保證各節(jié)點(diǎn) cookie 一致,否則節(jié)點(diǎn)之間就無(wú)法通信。

2.4.4.1 停止各服務(wù)器 RabbitMQ 并同步 cookie
root@rabbit-server-node1:~# systemctl stop rabbitmq-server
root@rabbit-server-node2:~# systemctl stop rabbitmq-server
root@rabbit-server-node3:~# systemctl stop rabbitmq-server

root@rabbit-server-node1:~# scp /var/lib/rabbitmq/.erlang.cookie rabbit-server-node2:/var/lib/rabbitmq/.erlang.cookie
root@rabbit-server-node2's password:
.erlang.cookie                   100%   20    42.4KB/s   00:00

root@rabbit-server-node1:~# scp /var/lib/rabbitmq/.erlang.cookie rabbit-server-node3:/var/lib/rabbitmq/.erlang.cookie
root@rabbit-server-node3's password:
.erlang.cookie                   100%   20    42.4KB/s   00:00
2.4.4.2 啟動(dòng)各服務(wù)器 RabbitMQ
root@rabbit-server-node1:~# systemctl start rabbitmq-server
root@rabbit-server-node2:~# systemctl start rabbitmq-server
root@rabbit-server-node3:~# systemctl start rabbitmq-server
2.4.4.3 創(chuàng)建集群

將 rabbit-server-node1 作為內(nèi)存節(jié)點(diǎn)加入 rabbit-server-node3 成為集群,
執(zhí)行以下命令:

# 停止app
root@rabbit-server-node1:~# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbit-server-node1 ...
# 清除元數(shù)據(jù)
root@rabbit-server-node1:~# rabbitmqctl reset
Resetting node rabbit@rabbit-server-node1 ...
# 加入集群,以node3為集群目標(biāo)
root@rabbit-server-node1:~# rabbitmqctl join_cluster rabbit@rabbit-server-node3 --ram
Clustering node rabbit@rabbit-server-node1 with rabbit@rabbit-server-node3
# 啟動(dòng)app
root@rabbit-server-node1:~# rabbitmqctl start_app
Starting node rabbit@rabbit-server-node1 ...
 completed with 3 plugins.

將 rabbit-server-node2 作為內(nèi)存節(jié)點(diǎn)加入 rabbit-server-node3 成為集群,
執(zhí)行以下命令:

root@rabbit-server-node2:~# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbit-server-node2 ...
root@rabbit-server-node2:~# rabbitmqctl reset
Resetting node rabbit@rabbit-server-node2 ...
root@rabbit-server-node2:~# rabbitmqctl join_cluster rabbit@rabbit-server-node3 --ram
Clustering node rabbit@rabbit-server-node2 with rabbit@rabbit-server-node3
root@rabbit-server-node2:~# rabbitmqctl start_app
Starting node rabbit@rabbit-server-node2 ...
 completed with 3 plugins.
2.4.4.4 將集群設(shè)置為鏡像模式

在 node1 或者 node2 執(zhí)行下面的命令:

root@rabbit-server-node2:~# rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "#" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
2.4.4.5 驗(yàn)證集群狀態(tài)
root@rabbit-server-node2:~# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit-server-node2 ...
Basics

Cluster name: rabbit@rabbit-server-node3

Disk Nodes
# 磁盤(pán)節(jié)點(diǎn):集群中至少有一個(gè)節(jié)點(diǎn)是磁盤(pán)節(jié)點(diǎn)用于數(shù)據(jù)持久化
rabbit@rabbit-server-node3

RAM Nodes
# 內(nèi)存節(jié)點(diǎn)
rabbit@rabbit-server-node1
rabbit@rabbit-server-node2

Running Nodes
# 正在運(yùn)行的節(jié)點(diǎn)
rabbit@rabbit-server-node1
rabbit@rabbit-server-node2
rabbit@rabbit-server-node3

Versions
# 軟件版本
rabbit@rabbit-server-node1: RabbitMQ 3.8.3 on Erlang 22.3
rabbit@rabbit-server-node2: RabbitMQ 3.8.3 on Erlang 22.3
rabbit@rabbit-server-node3: RabbitMQ 3.8.3 on Erlang 22.3

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@rabbit-server-node1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit-server-node1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit-server-node1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit-server-node2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit-server-node2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit-server-node2, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit-server-node3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit-server-node3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@rabbit-server-node3, interface: [::], port: 15672, protocol: http, purpose: HTTP API

Feature flags

Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled

2.4.5 WEB 界面查看集群

各個(gè)服務(wù)器啟用 web 管理界面,不啟用 web 插件的 rabbitmq 服務(wù)器,會(huì)在 web 節(jié)點(diǎn)提示節(jié)點(diǎn)
統(tǒng)計(jì)信息不可用(Node statistics not available)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-672463.html

root@rabbit-server-node2:~# rabbitmq-plugins enable rabbitmq_management
root@rabbit-server-node3:~# rabbitmq-plugins enable rabbitmq_management

2.5 RabbitMQ 常用命令

# 新建vhost
root@rabbit-server-node1:~# rabbitmqctl add_vhost stevenux
Adding vhost "stevenux" ...

# 列出vhost
root@rabbit-server-node1:~# rabbitmqctl list_vhosts
Listing vhosts ...
name
/
stevenux

# 列出隊(duì)列
root@rabbit-server-node1:~# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...

# 刪除vhost
root@rabbit-server-node1:~# rabbitmqctl delete_vhost stevenux
Deleting vhost "stevenux" ...

# 新建用戶(hù)
root@rabbit-server-node1:~# rabbitmqctl add_user stevenux stevenux
Adding user "stevenux" ...

# 改用戶(hù)密碼
root@rabbit-server-node1:~# rabbitmqctl change_password stevenux 1233211234567
Changing password for user "stevenux" ...


root@rabbit-server-node1:~# rabbitmqctl add_vhost stevenux
Adding vhost "stevenux" ...

# 設(shè)置stevenux用戶(hù)對(duì)vhost stevenux有讀寫(xiě)權(quán)限
root@rabbit-server-node1:~# rabbitmqctl set_permissions -p stevenux stevenux ".*" ".*" ".*"Setting permissions for user "stevenux" in vhost "stevenux" ...

三. 使用 python 與操作 RabbitMQ

publisher

import pika
import json

credentials = pika.PlainCredentials('stevenux', '1233211234567')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.100.160',
                                                               port=5672,
                                                               virtual_host='stevenux',
                                                               credentials=credentials))
channel = connection.channel()
result = channel.queue_declare(queue='python-test')

for i in range(10):
    message = json.dumps({'OrderId': "1000%s" % i})
    channel.basic_publish(exchange='',
                          routing_key='python-test',
                          body=message)
    print(message)

connection.close()

consumer

import pika
import time

credentials = pika.PlainCredentials('stevenux', '1233211234567')
connection = pika.BlockingConnection(pika.ConnectionParameters(host='192.168.100.160',
                                                               port=5672,
                                                               virtual_host='stevenux',
                                                               credentials=credentials))
channel = connection.channel()
channel.queue_declare(queue='python-test', durable=False)


def callback(ch, method, properties, body):
    ch.basic_ack(delivery_tag=method.delivery_tag)
    print(body.decode())


channel.basic_consume('python-test', callback)
channel.start_consuming()

到了這里,關(guān)于MQ 簡(jiǎn)介-RabbitMQ的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微服務(wù)學(xué)習(xí):SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    微服務(wù)學(xué)習(xí):SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    目錄 一、高級(jí)篇 二、面試篇 ==============實(shí)用篇============== day05-Elasticsearch01 1.初識(shí)elasticsearch 1.4.安裝es、kibana 1.4.1.部署單點(diǎn)es 1.4.2.部署kibana 1.4.3.安裝IK分詞器 1.4.4.總結(jié) 2.索引庫(kù)操作 2.1.mapping映射屬性 2.2.索引庫(kù)的CRUD 2.2.1.創(chuàng)建索引庫(kù)和映射 2.2.2.查詢(xún)索引庫(kù) 2.2.3.修改索引庫(kù) 2.

    2024年02月02日
    瀏覽(25)
  • 分布式消息隊(duì)列:Kafka vs RabbitMQ vs ActiveMQ

    在現(xiàn)代分布式系統(tǒng)中,消息隊(duì)列是一種常見(jiàn)的異步通信模式,它可以幫助系統(tǒng)處理高并發(fā)、高可用性以及容錯(cuò)等問(wèn)題。在這篇文章中,我們將深入探討三種流行的分布式消息隊(duì)列:Apache Kafka、RabbitMQ和ActiveMQ。我們將討論它們的核心概念、算法原理、特點(diǎn)以及使用場(chǎng)景。 隨著

    2024年02月02日
    瀏覽(19)
  • Python爬蟲(chóng)分布式架構(gòu) - Redis/RabbitMQ工作流程介紹

    Python爬蟲(chóng)分布式架構(gòu) - Redis/RabbitMQ工作流程介紹

    在大規(guī)模數(shù)據(jù)采集和處理任務(wù)中,使用分布式架構(gòu)可以提高效率和可擴(kuò)展性。本文將介紹Python爬蟲(chóng)分布式架構(gòu)中常用的消息隊(duì)列工具Redis和RabbitMQ的工作流程,幫助你理解分布式爬蟲(chóng)的原理和應(yīng)用。 為什么需要分布式架構(gòu)? 在數(shù)據(jù)采集任務(wù)中,單機(jī)爬蟲(chóng)可能面臨性能瓶頸和資

    2024年02月11日
    瀏覽(29)
  • (黑馬出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    (黑馬出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文檔是在心向陽(yáng)光的天域的博客加了一些有助于自己的知識(shí)體系,也歡迎大家關(guān)注這個(gè)大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是這個(gè)視頻](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以讓我們極其方便

    2024年03月12日
    瀏覽(15)
  • 分布式搜索引擎(Elastic Search)+消息隊(duì)列(RabbitMQ)部署(商城4)

    分布式搜索引擎(Elastic Search)+消息隊(duì)列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于實(shí)現(xiàn)全文搜索功能,例如商城中對(duì)商品搜索、搜索、分類(lèi)搜索、訂單搜索、客戶(hù)搜索等。它支持復(fù)雜的查詢(xún)語(yǔ)句、中文分詞、近似搜索等功能,可以快速地搜索并返回匹配的結(jié)果。 2、日志分析 Elastic search可以用于實(shí)現(xiàn)實(shí)時(shí)日志分析,例

    2024年02月04日
    瀏覽(21)
  • 分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步

    分布式 SpringCloudAlibaba、Feign與RabbitMQ實(shí)現(xiàn)MySQL到ES數(shù)據(jù)同步

    本文參考黑馬 分布式Elastic search Elasticsearch是一款非常強(qiáng)大的開(kāi)源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 同步調(diào)用 方案一:同步調(diào)用 基本步驟如下: hotel-demo對(duì)外提供接口,用來(lái)修改elasticsearch中的數(shù)據(jù) 酒店管理服務(wù)在完成數(shù)據(jù)庫(kù)操

    2024年04月11日
    瀏覽(25)
  • (黑馬出品_高級(jí)篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    (黑馬出品_高級(jí)篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文檔是在心向陽(yáng)光的天域的博客加了一些有助于自己的知識(shí)體系,也歡迎大家關(guān)注這個(gè)大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是這個(gè)視頻](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 消息隊(duì)列在使用過(guò)程中,面

    2024年03月19日
    瀏覽(26)
  • 【103期】RabbitMQ 實(shí)現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性

    【103期】RabbitMQ 實(shí)現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性

    org.springframework.boot spring-boot-starter-amqp mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-jdbc com.alibaba fastjson 1.2.17 3.2.1.2配置文件內(nèi)容: server: port:?8080 spring: datasource: driver-class-name:?com.mysql.cj.jdbc.Driver url:?jdbc:mysql://localhost:3306/test?useUnicode=tru

    2024年04月14日
    瀏覽(32)
  • SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系統(tǒng)詳解springcloud微服務(wù)技術(shù)棧

    SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系統(tǒng)詳解springcloud微服務(wù)技術(shù)棧

    我們發(fā)現(xiàn)在微服務(wù)中有一個(gè)令人頭疼的問(wèn)題——部署,用Docker去解決這個(gè)部署難題 1、項(xiàng)目部署的問(wèn)題 2、Docker 扔到一臺(tái)機(jī)器上,它們的依賴(lài)難道沒(méi)有干擾嗎?不會(huì),docker將打包好的程序放到一個(gè)隔離容器去運(yùn)行,使用沙箱機(jī)制,避免互相干擾,之間不可見(jiàn),這樣就解決了混

    2023年04月24日
    瀏覽(18)
  • RabbitMQ:高效傳遞消息的魔法棒,一篇帶你助力構(gòu)建可靠的分布式系統(tǒng)(上篇)

    RabbitMQ:高效傳遞消息的魔法棒,一篇帶你助力構(gòu)建可靠的分布式系統(tǒng)(上篇)

    MQ是消息隊(duì)列( Message Queue )的縮寫(xiě),是一種在應(yīng)用程序之間傳遞消息的技術(shù)。通常用于 分布式系統(tǒng) 或 異步通信 中,其中 發(fā)送者 將消息放入隊(duì)列,而 接收者 從隊(duì)列中獲取消息。 這種異步通信模式允許發(fā)送者和接收者在不需要實(shí)時(shí)連接的情況下進(jìn)行通信,從而提高了應(yīng)用

    2024年02月15日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包