真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

消息中間件Rabbitmq的使用

一:消息中間件的描述
1、簡介
消息中間件也可以稱消息隊列,是指用高效可靠的消息傳遞機制進行與平臺無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。通過提供消息傳遞和消息隊列模型,可以在分布式環(huán)境下擴展進程的通信。
當下主流的消息中間件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等

站在用戶的角度思考問題,與客戶深入溝通,找到都江堰網(wǎng)站設(shè)計與都江堰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋都江堰地區(qū)。

2、消息中間件主要作用
? 冗余(存儲)
? 擴展性
? 可恢復性
? 順序保證
? 緩沖
? 異步通信
? 削峰 :消息隊列中的常用場景,一般在秒殺或搶夠活動中使用廣泛。一般會因為流量過大,應(yīng)用系統(tǒng)配置承載不了這股瞬間流量,導致系統(tǒng)直接掛掉,即傳說中的“宕機”現(xiàn)象。為解決這個問題,我們會將那股巨大的流量拒在系統(tǒng)的上層,即將其轉(zhuǎn)移至 MQ 而不直接涌入我們的接口。

二.消息隊列之一RabbiMQ簡介
1, RabbiMQ是?Erang開發(fā)的,集群?常?便,因為Erlang天?就是??分布式語?,但其本身并不?持負載均衡,支持高并發(fā),支持可擴展。支持AJAX,持久化,用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗。

2, RabbiMQ的特點
? 可靠性
? 擴展性
? 高可用性
? 多種協(xié)議
? 多語言客戶端
? 管理界面
? 插件機制

3.什么是消息隊列
MQ 全稱為Message Queue, 消息隊列。是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過讀寫出入隊列的消息(針對應(yīng)用程序的數(shù)據(jù))來通信,而無需專用連接來鏈接它們。
消息傳遞指的是程序之間通過在消息中發(fā)送數(shù)據(jù)進行通信,而不是通過直接調(diào)用彼此來通信。

4.RabbiMQ模式
注意:RabbitMQ模式?概分為以下三種:
(1)單?模式 (一臺主機部署rabbitmq)
(2)普通模式 (默認的集群模式)。
(3) 鏡像模式 (把需要的隊列做成鏡像隊列,存在于多個節(jié)點,屬于RabbiMQ的HA?案,在對業(yè)務(wù)可靠性要求較?的場合中?較適?)。要實現(xiàn)鏡像模式,需要先搭建?個普通集群模式,在這個模式的基礎(chǔ)上再配置鏡像模式以實現(xiàn)?可?,在鏡像模式中設(shè)置策略可以將主rabbitmq中的數(shù)據(jù)同步到集群中其他節(jié)點里

++++++++++++RabbitMQ 集 群 基 礎(chǔ) 部 署 (普通模式)++++++++++++

一:基礎(chǔ)部署,集群里的主機都需要實施的操作

1,若有三臺服務(wù)器作為三個節(jié)點,且都聯(lián)?,關(guān)閉防火墻,selinux,編輯域名解析/etc/hosts(ip與主機名稱應(yīng)該對應(yīng)好,要不然容易影響實驗)
[root@rabbitmq-1 ~]# vim /etc/hosts
192.168.50.138 rabbitmq-1
192.168.50.139 rabbitmq-2
192.168.50.140 rabbitmq-3

2,三個節(jié)點配置安裝rabbitmq軟件
安裝依賴:
[root@rabbitmq-1 ~]# yum install -y gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel
[root@rabbitmq-1 ~]# wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3-1.el7.centos.x86_64.rpm/download.rpm
[root@rabbitmq-1 ~]# rpm -ivh erlang-20.3-1.el7.centos.x86_64.rpm

測試;
[root@rabbitmq-1 ~]# erl

安裝rabbitmq:
[root@rabbitmq-1 ~]# wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.5/rabbitmq-server-3.7.5-1.el7.noarch.rpm
[root@rabbitmq-1 ~]# yum install rabbitmq-server-3.7.5-1.el7.noarch.rpm

3.啟動
啟動方式一:
[root@rabbitmq-1 ~]# systemctl daemon-reload
[root@rabbitmq-1 ~]# systemctl start rabbitmq-server
[root@rabbitmq-1 ~]# systemctl enable rabbitmq-server
[root@rabbitmq-1 ~]# systemctl status rabbitmq-server
啟動方式二:
[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server status ---查看狀態(tài)
[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server start ---啟動

4,開啟rabbitmq的web訪問界面:
[root@rabbitmq-1 ~]# rabbitmq-plugins enable rabbitmq_management


5.創(chuàng)建用戶:
注意:創(chuàng)建用戶只需要在一臺主機上添加就可以,即把誰當作管理員就在哪兒創(chuàng)建
(1)添加用戶和密碼誰在
[root@rabbitmq-1 ~]# rabbitmqctl add_user soho 123
Creating user "soho" ...
...done.
(2)這是為管理員
[root@rabbitmq-1 ~]# rabbitmqctl set_user_tags soho administrator
Setting tags for user "soho" to [administrator] ...
...done.
(3)查看用戶
[root@rabbitmq-1 ~]# rabbitmqctl list_users
Listing users ...
guest [administrator]
soho [administrator]
...done.
(4)權(quán)限
[root@rabbitmq-1 ~]# rabbitmqctl set_permissions -p "/" soho "." "." "."
Setting permissions for user "soho" in vhost "/" ...
...done.
此處設(shè)置權(quán)限時注意'.
'之間需要有空格 三個'.*'分別代表了conf權(quán)限,read權(quán)限與write權(quán)限 例如:當沒有給
soho設(shè)置這三個權(quán)限前是沒有權(quán)限查詢隊列,在ui界面也看不見


6,所有機器都操作:開啟用戶遠程登錄:
[root@rabbitmq-1 ~]# cd /etc/rabbitmq/
[root@rabbitmq-1 rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
[root@rabbitmq-1 rabbitmq]# ls
enabled_plugins rabbitmq.config
[root@rabbitmq-1 rabbitmq]# vim rabbitmq.config
修改如下:

7.三臺機器都操作重啟服務(wù)服務(wù):
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server
查看端口 所有機器都操作:開啟用戶遠程登錄:
[root@rabbitmq-1 ~]# cd /etc/rabbitmq/
[root@rabbitmq-1 rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
[root@rabbitmq-1 rabbitmq]# ls
enabled_plugins rabbitmq.config
[root@rabbitmq-1 rabbitmq]# vim rabbitmq.config
修改如下:
消息中間件Rabbitmq的使用

8.三臺機器都操作重啟服務(wù)服務(wù):
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server
查看端口
消息中間件Rabbitmq的使用
4369 -- erlang發(fā)現(xiàn)口
5672 --程序連接端口
15672 -- 管理界面ui端口
25672 -- server間內(nèi)部通信口

9,注意如果是云服務(wù)器,切記添加安全組端口放行。
web訪問:192.168.50.138:15672
這里需要注意:
rabbitmq默認管理員用戶:guest 密碼:guest
新添加的用戶為:soho 密碼:123

++++++++++++RabbitMQ 集 群 正 式 部 署 (普通模式)+++++++++++++

二,正式部署集群

1.首先創(chuàng)建好數(shù)據(jù)存放目錄和日志存放目錄
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R

2,創(chuàng)建配置文件:
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf (添加如下內(nèi)容)
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs

[root@rabbitmq-1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf

3,重啟服務(wù)
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server

4.拷?erlang.cookie
原因:集群中各節(jié)點是經(jīng)由?個cookie來實現(xiàn)的,所以必須保證各節(jié)點cookie?致,不然節(jié)點之間就?法通信.(cookie存放的位置:解壓縮方式安裝部署的rabbitmq存放于/home/.erlang.cookie。rpm等安裝包方式進行安裝的/var/lib/rabbitmq)

[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
HOUCUGJDZYTFZDSWXTHJ
?scp的?式將rabbitmq-1節(jié)點的.erlang.cookie的值復制到其他兩個節(jié)點中。
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.139:/var/lib/rabbitmq/
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.140:/var/lib/rabbitmq/

3.將mq-2、mq-3作為內(nèi)存節(jié)點加?mq-1節(jié)點集群中.mq-1用作磁盤節(jié)點,在RabbitMQ集群中,必須?少有?個磁盤節(jié)點,否則隊列元數(shù)據(jù)?法寫?到集群中,當磁盤節(jié)點宕掉時,集群將?法寫?新的隊列元數(shù)據(jù)信息。
在mq-2、mq-3執(zhí)?如下命令:
[root@rabbitmq-2 ~]# rabbitmqctl stop_app #停止節(jié)點,切記不是停止服務(wù)
[root@rabbitmq-2 ~]# rabbitmqctl reset #如果有數(shù)據(jù)需要重置,沒有則不用
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1 #添加到磁盤節(jié)點
Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...
[root@rabbitmq-2 ~]# rabbitmqctl start_app #啟動節(jié)點
Starting node 'rabbit@rabbitmq-2' ...

3.1.0此處節(jié)點問題解決方式:
(1)如果執(zhí)行rabbitmqctl stop_app 這條命令報錯:需要執(zhí)行
#chmod 400 .erlang.cookie ?件是400的權(quán)限
#chown rabbitmq.rabbitmq .erlang.cookie
(2)由于更改hostname文件,在每次rabbitmqctl stop或者rabbitmqctl cluster_status等,只要是rabbitmq的命令就報錯,提示大概如下
Cluster status of node rabbit@web2 ...
Error: unable to connect to node rabbit@web2: nodedown
..............
此時先ps aux | grep mq,然后kill -9 所有mq的進程,然后再rabbitmq-server -detached即可解決。(即先強殺,再重新啟動)
(3)使用rabbitmqctl stop,rabbitmq-server -detached重新啟動后,原先添加的用戶admin、虛擬主機coresystem等均丟失,還需要重新添加。
(4) rabbitmqctl join_cluster --ram rabbit@rabbitmq-1報錯時檢查域名解析
(5)其他問題關(guān)于使用 rabbitmq-server -detached命令啟動rabbitmq時,出現(xiàn)以下提示W(wǎng)arning: PID file not written; -detached was passed,此時使用
rabbitmqctl status提示服務(wù)已啟動,可知此問題不用解決。
3.1.1節(jié)點補充:
(1)默認rabbitmq啟動后是磁盤節(jié)點,在這個cluster命令下,mq-2和mq-3是內(nèi)存節(jié)點,
mq-1是磁盤節(jié)點。
( 2)如果要使mq-2、mq-3都是磁盤節(jié)點,去掉--ram參數(shù)即可。
(3)如果想要更改節(jié)點類型,可以使?命令rabbitmqctl change_cluster_node_type disc(ram),前提是必須停掉rabbit應(yīng)?
注:
#如果有需要使用磁盤節(jié)點加入集群
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1
[root@rabbitmq-3 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1

4,查看集群狀態(tài),在任意節(jié)點上執(zhí)行 rabbitmqctl cluster_status來查看是否集群配置成功。
[root@rabbitmq-1 ~]# rabbitmqctl cluster_status
消息中間件Rabbitmq的使用
每臺機器顯示出三臺節(jié)點,表示已經(jīng)添加成功!

5.登錄rabbitmq web管理控制臺,創(chuàng)建新的隊列
打開瀏覽器輸?http://192.168.50.138:15672,
輸?默認的Username:guest
輸?默認的Password:guest
消息中間件Rabbitmq的使用

根據(jù)界?提示創(chuàng)建?條隊列
消息中間件Rabbitmq的使用

++++++由以上RABBITMQ普通模式+鏡像模式+++++++++++++

三,添加鏡像模式的原因:

     上面已經(jīng)完成RabbitMQ默認集群模式,但并不保證隊列的高可用性,隊列內(nèi)容不會復制。如果隊列節(jié)點宕機直接導致該隊列無法應(yīng)用,只能等待重啟,所以要想在隊列節(jié)點宕機或故障也能正常應(yīng)用,就要復制隊列內(nèi)容到集群里的每個節(jié)點,必須要創(chuàng)建鏡像隊列。    鏡像隊列是基于普通的集群模式的。

1,創(chuàng)建鏡像集群:三臺機器相同操作
rabbitmq set_policy :設(shè)置策略
[root@rabbitmq-1 ~]#rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

2,再次查看隊列已經(jīng)同步到其他兩臺節(jié)點:
消息中間件Rabbitmq的使用

3,此時鏡像隊列設(shè)置成功。已經(jīng)部署完成,將所有隊列設(shè)置為鏡像隊列,即隊列會被復制到各個節(jié)點,各個節(jié)點狀態(tài)保持一致。``

++++++++rabbitmq默認的集群模式+鏡像模式+HA+負載均衡++++++++++++
RabbitMQ 高可用集群搭建完成,最后一個步驟就是搭建均衡器。
消息中間件Rabbitmq的使用

簡單安裝并配置負載均衡器HA

注意:如果使用阿里云,可以使用阿里云的內(nèi)網(wǎng)slb來實現(xiàn)負載均衡,不用自己搭建HA。
安裝并配置負載均衡器HA
1、在192.168.50.138安裝HAProxy
yum -y install haproxy
2、修改 /etc/haproxy/haproxy.cfg
[root@rabbitmq-1 ~]# cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
[root@rabbitmq-1 ~]# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2

chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
nbproc      4
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
defaults
mode http
log global
retries 3
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
maxconn 2048
#---------------------------------------------------------------------
##監(jiān)控查看本地狀態(tài)#####
listen admin_stats
bind :80
mode http
option httplog
option httpclose
log 127.0.0.1 local0 err
stats uri /haproxy
stats auth xingdian:123 (用戶+密碼)
stats refresh 30s
####################################
###反代監(jiān)控
frontend server
bind
:5670
log global
mode tcp
#option forwardfor
default_backend rabbitmq
maxconn 3
backend rabbitmq
mode tcp
log global
balance roundrobin
server rabbitmq1 192.168.50.138:5672 check inter 2000s rise 2 fall 3
server rabbitmq2 192.168.50.139:5672 check inter 2000s rise 2 fall 3
server rabbitmq3 192.168.50.140:5672 check inter 2000s rise 2 fall 3

[root@rabbitmq-1 ~]# systemctl restart haproxy

瀏覽器輸入http://192.168.50.138/haproxy查看rabbitmq的狀態(tài)。


當前名稱:消息中間件Rabbitmq的使用
網(wǎng)站網(wǎng)址:http://weahome.cn/article/jjpced.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部