99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

阿里云服務器部署RabbitMQ集群的詳細教程


一、為什么要搭建RabbitMQ集群?

未部署集群的缺點

創新互聯建站始終堅持【策劃先行,效果至上】的經營理念,通過多達十多年累計超上千家客戶的網站建設總結了一套系統有效的全網營銷解決方案,現已廣泛運用于各行各業的客戶,其中包括:辦公空間設計等企業,備受客戶好評。

如果RabbitMQ集群只有一個broker節點,那么該節點的失效將導致整個服務臨時性的不可用,并且可能會導致message的丟失(尤其是在非持久化message存儲于非持久化queue中的時候)。可以將所有message都設置為持久化,并且使用持久化的queue,但是這樣仍然無法避免由于緩存導致的問題:因為message在發送之后和被寫入磁盤并執行fsync之間存在一個雖然短暫但是會產生問題的時間窗。通過publisher的confirm機制能夠確保客戶端知道哪些message已經存入磁盤,盡管如此,一般不希望遇到因單點故障導致服務不可用。

部署集群后

如果RabbitMQ集群是由多個broker節點構成的,那么從服務的整體可用性上來講,該集群對于單點失效是有彈性的,但是同時也需要注意:盡管exchange和binding能夠在單點失效問題上幸免于難,但是queue和其上持有的message卻不行,這是因為queue及其內容僅僅存儲于單個節點之上,所以一個節點的失效表現為其對應的queue不可用。

RabbitMQ本身是基于Erlang編寫,Erlang語言天生具備分布式特性(通過同步Erlang集群各節點的erlang.cookie來實現)。因此,RabbitMQ天然支持集群。集群是保證可靠性的一種方式,同時可以通過水平擴展以達到增加消息吞吐量能力的目的。

為了提高程序的吞吐量,保持消息的可靠性,一臺機器掛了后,RabbitMQ能夠正常生產,消費消息。


二、RabbitMQ集群的三種模式

rabbitmq有三種模式:單機模式,普通集群模式,鏡像集群模式


單機模式

Demo級別的,一般只是本機測試玩玩而已,生產環境下不會用的。


普通集群模式

在多臺機器上啟動多個rabbitmq實例,每個機器啟動一個。
但是你創建的queue,只會放在一個rabbtimq實例上,但是每個實例都同步queue的元數據(存放含queue數據的真正實例位置)。消費的時候,實際上如果連接到了另外一個實例,那么那個實例會從queue所在實例上拉取數據過來。

示意圖

這種方式確實很麻煩,也不怎么好,沒做到所謂的分布式,就是個普通集群。

普通集群的方式,確實達到了消息的高可用,但沒辦法保證可靠性,沒做到分布式,簡而言之,只是一個普通的集群。

缺點:成都服務器托管

  • 可能會在RabbitMQ集群內部產生大量數據傳輸
  • 可用性沒有達到保證,一臺機器掛了就是掛了,無法恢復,只能手動恢復

鏡像隊列

這種模式,才是所謂的rabbitmq的高可用模式,跟普通集群模式不一樣的是,你創建的queue,無論元數據還是queue里的消息都會存在于多個實例上,然后每次你寫消息到queue的時候,都會自動把消息到多個實例的queue里進行消息同步。

上圖中每個節點有一個queue,生產者生產完畢數據后投遞到指定交換機的隊列,交換機的隊列進行消息同步。

每個節點queue都有一個完整的rabbitmq節點,所以這種方式叫做鏡像集群

鏡像集群模式的好處與壞處

好處:任何一個節點宕機后,其它節點不受影響,正常使用

壞處:成都服務器托管

  • 性能開銷大,消息同步所有機器,導致網絡帶寬壓力和消耗很重
  • 沒有擴展性,如果某個queue負載很重,加機器,新增的機器也包含了這個queue的所有數據,沒有辦法擴展

對于以上方式,我們的鏡像集群可以通過配置來解決這種擴展性的問題,配置同步的方式


三、阿里云服務器下Docker搭建RabbitMQ集群


Docker安裝RabbitMQ集群

確保機器中安裝了Docker,若未安裝,可看:Docker安裝阿里云服務器和在虛擬機安裝遇到的坑(問題小結)

使用Docker安裝RabbitMQ鏡像

?
1
2
# 拉取鏡像,帶有管理界面的版本
docker pull rabbitmq:management

查看拉取的鏡像

?
1
docker images

運行Docker鏡像

?
1
2
3
4
5
6
7
8
# 開啟第一個RabbitMQ服務
docker run -d --hostnamemyRabbit1 --name rabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie'rabbitmq:management
# 開啟第二個
docker run -d --hostnamemyRabbit2 --name rabbit2 -p 15673:15672 -p 5673:5672 --link rabbit1:myRabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie'rabbitmq:management
# 開啟第三個
docker run -d --hostnamemyRabbit3 --name rabbit3 -p 15674:15672 -p 5674:5672 --link rabbit1:myRabbit1 --link rabbit2:myRabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie'rabbitmq:management

查看正在運行的鏡像

?
1
docker ps

成功運行

配置RabbitMQ節點之間的關系

設置節點1

?
1
2
3
4
5
6
7
8
[root@wanghuichen /]# docker exec -it rabbit1 bash
root@myRabbit1:/# rabbitmqctl stop_app
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Stopping rabbit application on node rabbit@myRabbit1 ...
root@myRabbit1:/# rabbitmqctl reset
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Resetting node rabbit@myRabbit1 ...
root@myRabbit1:/# rabbitmqctl

設置節點2

?
1
2
3
4
5
6
7
8
9
10
11
[root@wanghuichen /]# docker exec -it rabbit2 bash
root@myRabbit2:/# rabbitmqctl stop_app
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Stopping rabbit application on node rabbit@myRabbit2 ...
root@myRabbit2:/# rabbitmqctl reset
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Resetting node rabbit@myRabbit2 ...
root@myRabbit2:/# rabbitmqctl join_cluster --ram rabbit@myRabbit1
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Clustering node rabbit@myRabbit2 with rabbit@myRabbit1
root@myRabbit2:/# rabbitmqctl join_cluster --ram rabbit@myRabbit1

配置節點3

?
1
2
3
4
5
6
7
8
9
[root@wanghuichen /]# docker exec -it rabbit3 bash
root@myRabbit3:/# rabbitmqctl stop_app
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Stopping rabbit application on node rabbit@myRabbit3 ...
root@myRabbit3:/# rabbitmqctl reset
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Resetting node rabbit@myRabbit3 ...
root@myRabbit3:/# rabbitmqctl join_cluster --ram rabbit@myRabbit1
root@myRabbit3:/# rabbitmqctl start_app

進入每個集群依次設置用戶密碼

?
1
2
3
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*"".*"".*"

配置鏡像隊列

?
1
2
3
4
5
6
7
[root@wanghuichen /]# docker exec -it rabbit1 bash
root@myRabbit1:/# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Setting policy "ha-all"forpattern "^"to "{"ha-mode":"all"}"with priority "0"forvhost "/"...
root@myRabbit1:/# rabbitmqctl cluster_status
RABBITMQ_ERLANG_COOKIE envvariable support is deprecated and will be REMOVED ina future version. Use the $HOME/.erlang.cookie fileor the --erlang-cookie switch instead.
Cluster status of node rabbit@myRabbit1 ...

查看集群狀態

?
1
rabbitmqctl cluster_status

常用命令

?
1
2
3
4
5
6
7
8
9
10
# 查看已經運行過但停止了的鏡像
docker ps-a
# 停止鏡像
docker stop 鏡像id/鏡像名稱
# 開啟鏡像,恢復運行狀態
dockers start 鏡像id/鏡像名稱
# 刪除鏡像
docker rm鏡像id/鏡像名稱
# 刪除所有鏡像
docker rmi $(docker ps-a)

測試RabbitMQ集群

瀏覽器輸入 您的ip地址:15673

部署RabbitMQ鏡像集群成功~

如果出現無法訪問的情況,可在阿里云服務器開啟安全組,因為阿里云默認全部開啟了安全組,配置允許訪問的端口即可

再次測試即可成功~


四、SpringBoot整合RabbitMQ集群


創建Maven聚合工程

File —> New —> Project —> Maven —> 直接Next 進入下一步創建普通的Maven工程即可

創建一個默認的Maven聚合工程,將src文件夾刪除,該工程就是一個Maven聚合工程


引入共有依賴

引入依賴如下:成都服務器托管

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wanshi</groupId>
<artifactId>springboot-rabbitmq</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>rabbitmq-order-producer</module>
<module>rabbitmq-order-consumer</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
</project>

創建生產者

在項目內,新建一個Moudle,rabbitmq-order-producer 默認Maven工程,下一步即可

引入依賴

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xmlversion="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>rabbitmq-order-producer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

創建消費者

在項目內,新建一個Moudle,rabbitmq-order-cousumer 默認Maven工程

文章標題:阿里云服務器部署RabbitMQ集群的詳細教程
網站地址:http://www.yijiale78.com/article16/sjodg.html

成都網站建設公司_創新互聯,為您提供企業網站制作外貿建站虛擬主機網站改版響應式網站App開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設公司