<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 41  文章 - 7  trackbacks - 0
    <2016年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    在本章節(jié)中我們將覆蓋:
    1. 創(chuàng)建一個本地服務(wù)器集群
    2. 創(chuàng)建一個簡單集群
    3. 自動添加一個RabbitMQ 集群
    4. 引入消息負(fù)載均衡器
    5. 創(chuàng)建集群客戶端
    介紹
    RabbitMQ提供了各種各樣的特性以及集群功能.
    通過使用集群,一組適當(dāng)配置的主機(jī)的行為與單個broker實(shí)例一樣,但集群帶有下面的目的:
    1. 高可用性: 如果一個節(jié)點(diǎn)宕機(jī)了,分布式broker仍然能接受和處理消息.這方面內(nèi)容會在Chapter 7,Developing High-availability Applications中深入探討.
    2. 可伸縮的消息負(fù)載:消息路由在集群節(jié)點(diǎn)間是分布式的.
    3. 連接客戶端的伸縮性:每個節(jié)點(diǎn)都可以用來處理可用客戶端的某部分子集.
    TIP
    RabbitMQ集群節(jié)點(diǎn)應(yīng)該在LAN內(nèi). RabbitMQ 集群不能很好的容忍網(wǎng)絡(luò)分化,因?yàn)榫W(wǎng)絡(luò)分化期間,每個節(jié)點(diǎn)都是單獨(dú)工作的,目前還沒有機(jī)制來防止所謂的"split-brain syndrome" (可在 http://en.wikipedia.org/wiki/Consensus_(computer_science)找到解決這個問題的參數(shù)).在本地網(wǎng)絡(luò)中, RabbitMQ使用短超時來確定兄弟節(jié)點(diǎn)的可用性。更多信息,可參考http://www.rabbitmq.com/nettick.html.

    RabbitMQ集群中所有節(jié)點(diǎn)除了隊(duì)列外,可以共享虛擬主機(jī),用戶,交換器的定義,物理上它們只存在于創(chuàng)建的節(jié)點(diǎn)內(nèi). 另一方面,它們是全局定義的,可通過集群的任何節(jié)點(diǎn)進(jìn)行連接。
    如果一個客戶端從還沒有創(chuàng)建隊(duì)列的節(jié)點(diǎn)上生產(chǎn)或消費(fèi)消息,其性能會降低,因?yàn)榭蛻舳诵枰鄠€跳躍才能到達(dá)物理上持有隊(duì)列的節(jié)點(diǎn)。


    TIP
    默認(rèn)情況下,隊(duì)列不會在集群節(jié)點(diǎn)間復(fù)制,因此當(dāng)出現(xiàn)節(jié)點(diǎn)故障時,你可能會丟失數(shù)據(jù).可參考Chapter 7Developing High-availability Applications 來解決這個問題。

    在章節(jié)中,我們將展示RabbitMQ集群伸縮性方面的例子,同時也會展示設(shè)計(jì)集群AMQP客戶端的正確方法.

    創(chuàng)建一個本地服務(wù)器集群
    本地集群指的是在同一臺主機(jī)上將多個RabbitMQ實(shí)例以單一集群的方式進(jìn)行配置。
    實(shí)際上,在產(chǎn)品環(huán)境中,通常來說,這沒有多大用處,因?yàn)?/span>
    它不提供任何可伸縮性和可靠性改進(jìn). 然而,創(chuàng)建本地集群來測試配置是相當(dāng)用的,如:開發(fā)PC。
    準(zhǔn)備
    為了付諸實(shí)施,我們需要安裝有RabbitMQ,并能正常運(yùn)行。即使嚴(yán)格上意義來不是必要的,我們也會安裝管理插件,就如Chapter 3Managing RabbitMQ中展示的一樣.在這種情況下,我們需要為每個broker指定不同的web控制臺TCP端口.
    如何做
    要創(chuàng)建一個本地集群,我們需要執(zhí)行下面的步驟:
    1. 從root shell (Linux)中,使用下面的命令來啟動另一個RbbitMQ實(shí)例:
    env RABBITMQ_NODENAME=node01 RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"
    rabbitmq-server -detached
    2. 使用下面的命令將此實(shí)例加入到默認(rèn)那個節(jié)點(diǎn):
    rabbitmqctl -n node01 stop_app
    rabbitmqctl -n node01 join_cluster rabbit@$HOSTNAME
    rabbitmqctl -n node01 start_app
    3. 使用下面的命令來檢查運(yùn)行的集群狀態(tài):
    rabbitmqctl cluster_status
    4. 使用下面的命令退出集群,并回歸到單獨(dú)節(jié)點(diǎn)狀態(tài):
    rabbitmqctl -n node01 stop_app
    rabbitmqctl -n node01 reset
    rabbitmqctl -n node01 start_app

    如何工作
    通過覆蓋某些配置選項(xiàng),可在同臺機(jī)器上運(yùn)行多個RabbitMQ 服務(wù)器實(shí)例. 尤其是在已經(jīng)安裝了broker的情況下,新安裝的broker必須強(qiáng)制指定不同的broker端口(默認(rèn)為5672)以及管理插件端口(默認(rèn)為15672)。
    這可以通過修改環(huán)境變量來完成(步驟1).目前,可用的RabbitMQ環(huán)境變量如下:
    1. RABBITMQ_MNESIA_BASE
    2. RABBITMQ_LOG_BASE
    3. RABBITMQ_NODENAME
    4. RABBITMQ_NODE_IP_ADDRESS
    5. RABBITMQ_NODE_PORT
    你可以在shell提示窗口中,輸入下面的命令來查看rabbitmqserver指南頁面中所有前面變量的詳細(xì)描述:
    man rabbitmq-server
    在這里,我們設(shè)置了node名稱,TCP端口,以及一些自定義參數(shù):
    RABBITMQ_NODENAME=node01
    RABBITMQ_NODE_PORT=5673
    RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]"

    TIP
    在Windows中,步驟1中的命令可通過在命令行中進(jìn)行設(shè)置.你可以將下面的腳本拷貝到一個.bat文件中來達(dá)到此目的:
    set RABBITMQ_NODENAME=%1
    set RABBITMQ_NODE_PORT=%2
    set RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,%3}]" "SBIN_FULL_PATH_HERE\rabbitmq-server" -detached

    此時,第二臺服務(wù)器相對于第一臺服務(wù)器來說,仍然是獨(dú)立運(yùn)行的。我們必須運(yùn)行步驟2中的三個命令,這樣兩個服務(wù)器才會綁定到同一個集群中。

    TIP
    在 Windows中,你需要使用 %COMPUTERNAME% 來代替$HOSTNAME.

    通過在集群環(huán)境中運(yùn)行提供的例子,你可以很容易地進(jìn)行檢查.節(jié)點(diǎn)上創(chuàng)建的以及代碼中使用的交換器將會復(fù)制到新添加的節(jié)點(diǎn)上,反之亦然. 可單獨(dú)訪問http://localhost:15672 和 http://localhost:15673 管理插件來了解此種情況。
    另外, 你也可以使用-n選項(xiàng)來指定特定節(jié)點(diǎn)來執(zhí)行rabbitmqctl命令,就像步驟2和步驟4中展示的一樣. 
    如果你不使用-n選項(xiàng),命令會直接在默認(rèn)rabbitmq節(jié)點(diǎn)上執(zhí)行.
    更多
    兩個節(jié)點(diǎn)神奇般地可以互相說話了,這要多虧它們共享了相同的Erlang cookie,因?yàn)樗鼈冊谕慌_機(jī)器上.
    事實(shí)上,多個不同RabbitMQ實(shí)例與任何Erlang分布式程序一樣,都會使用基本認(rèn)證方案.兩個應(yīng)用程序?qū)嵗芟嗷ネㄐ牛鼈儽仨氂邢嗤?span style="background-color: inherit;">Erlang cookie(一個包含任意數(shù)據(jù)的文件).它可以是字符串,GUID,或者是你能想到的任何東西.
    TIP
    Erlang cookie事實(shí)是上一個密鑰,如果沒有適當(dāng)?shù)谋Wo(hù), Erlang則不允許使用,并且不會工作.你可以為其設(shè)置適當(dāng)?shù)臋?quán)限,如下所示:
    chmod 400 .erlang.cookie

    你可在http://www.erlang.org/doc/getting_started/conc_prog.html#id67454找到更多關(guān)于Erlang cookies的信息.
    在不同主機(jī)上搭建集群中,必須強(qiáng)制性在各個主機(jī)上使用相同的Erlang cookie,在后續(xù)食譜中我們將看到這方面的內(nèi)容。


    創(chuàng)建一個簡單集群
    設(shè)置一個RabbitMQ集群也就是幾分鐘的事情,只需要配置幾個步驟,高可用集群就可以部署運(yùn)行。
    事實(shí)上,相對于本地集群,它更容易,可參考創(chuàng)建本地集群食譜,因?yàn)槊總€節(jié)點(diǎn)都會使用標(biāo)準(zhǔn)端口設(shè)置
    .
    準(zhǔn)備
    要準(zhǔn)備此食譜,你至少需要安裝在兩臺主機(jī)上安裝RabbitMQ實(shí)例,并將它們配置為獨(dú)立broker.
    TIP
    要使集群能正常工作,必須確保所有主機(jī)上的RabbitMQ和Erlang是一致的.

    主機(jī)可以是物理機(jī),也可以是云實(shí)例,還可以是虛擬機(jī)器.

    TIP
    Amazon Web Services (AWS) 預(yù)先安裝的RabbitMQ通常都是過期的,我們建議安裝主流的Linux AMI,然后安裝最新的RabbitMQ版本,可參考(http://www.rabbitmq.com/download.html).

    如何做
    在下面的步驟中,我們將節(jié)點(diǎn)命名為node01node02node03.作為一種選擇,你可以使用你當(dāng)前的主機(jī)名稱,從而可以越過步驟1到4.
    1. 如果節(jié)點(diǎn)已經(jīng)運(yùn)行,通過下面的命令來停止RabbitMQ server:
    service rabbitmq-server stop
    2. 在node01上, 在/etc/hosts中追加所有IP名稱綁定,如下所示(將你的IP地址放在這里):
    10.0.0.1 node01
    10.0.0.2 node02
    ...
    3. 從node1中拷貝下面的文件到所有其它節(jié)點(diǎn)上,以保證有相同的主機(jī)名稱定義:
    scp /etc/hosts 10.0.0.2:/etc/hosts
    scp /etc/hosts 10.0.0.3:/etc/hosts
    ...
    4. 在所有節(jié)點(diǎn)上設(shè)置本地主機(jī)名稱(每個服務(wù)器都設(shè)為不同的主機(jī)名稱):
    echo node01 > /etc/hostname
    hostname –F /etc/hostname
    然后,我們配置RabbitMQ.
    5. 從node01中拷貝RabbitMQ Erlang cookie到其它所有節(jié)點(diǎn)上:
    scp /var/lib/rabbitmq/.erlang.cookie node02:/var/lib/rabbitmq/.erlang.cookie
    scp /var/lib/rabbitmq/.erlang.cookie node03:/var/lib/rabbitmq/.erlang.cookie
    ...
    6. 重啟所有節(jié)點(diǎn)上的RabbitMQ server:
    service rabbitmq-server start
    7. 將所有節(jié)點(diǎn)加入到node01.在除node01的所有節(jié)點(diǎn)上,運(yùn)行下面的命令:
    rabbitmqctl stop_app
    rabbitmqctl join_cluster --ram rabbit@node01
    rabbitmqctl start_app

    此時,集群已能正常運(yùn)行了.我們可以執(zhí)行一些更多的命令:
    1. 檢查集群狀態(tài):
    rabbitmqctl cluster_status
    2. 修改node02的節(jié)點(diǎn)類型:
    rabbitmqctl stop_app
    rabbitmqctl change_cluster_node_type disc
    rabbitmqctl stat_app
    3. 讓集群忘了node02,它是從node01來執(zhí)行的:
    rabbitmqctl forget_cluster_node rabbit@node02
    4. 讓刪除的node02忘記其集群狀態(tài).在node02上使用下面的命令:
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app

    如何工作
    集群中的所有服務(wù)器必須通過主機(jī)名來互相感知,這是很重要的,因?yàn)镮P地址對于RabbitMQ來說還不夠。因此,你必須為所有服務(wù)器配置/etc/hosts (或者配置windows中類似的hosts文件。
    TIP
    所有節(jié)點(diǎn)都需要使用短主機(jī)(short hostnames)來尋址. 如果你試圖使用全限定域名(FQDN), RabbitMQ可能不能正常工作。

    使用外部名稱服務(wù)器也是可以的,但在這種情況下,集群需要對它進(jìn)行依賴. 通常的慣例是在集群的前端設(shè)置了一個名稱服務(wù)器,并依賴靜態(tài)主機(jī)信息來配置集群。
    在所有節(jié)點(diǎn)配置之后,需要對它們進(jìn)行同步,以在其它服務(wù)器上共享同一個cookie. cookie文件可包含任意的字符串,以在節(jié)點(diǎn)間實(shí)現(xiàn)簡單地相互認(rèn)證。(步驟5)


    TIP
    通過指定-n選項(xiàng),也可以配置Erlang cookie來讓rabbitmqctl與遠(yuǎn)程節(jié)點(diǎn)一同工作.

    此時,可能過下面的命令來創(chuàng)建集群:
    rabbitmqctl join_cluster --ram rabbit@node01
    如果我們正確地執(zhí)行了所有步驟,我們可以得到下面的輸出:
    Clustering node rabbit@node02 with rabbit@node01 ...
    ...done.
    通過使用 --ram 選項(xiàng),我們將RabbitMQ 節(jié)點(diǎn)類型聲明為RAM.RAM類型的節(jié)點(diǎn)不會在磁盤上保存信息,它只是比磁盤節(jié)點(diǎn)(默認(rèn)節(jié)點(diǎn)類型)更快速.
    在RabbitMQ集群的介紹中,至少在集群中有一個節(jié)點(diǎn)的類型為磁盤節(jié)點(diǎn).這樣,在服務(wù)器重啟或某個磁盤節(jié)點(diǎn)出現(xiàn)故障時,所有配置(交換器,隊(duì)列等)才會安全。


    TIP
    實(shí)際上,由于你已在所有節(jié)點(diǎn)上拷貝了Erlang cookies,因此你可以通過-n選項(xiàng),可在node01上來執(zhí)行指定節(jié)點(diǎn)上的所有操作:
    rabbitmqctl -n rabbit@node02 stop_app
    rabbitmqctl -n rabbit@node02 join_cluster rabbit@node01
    rabbitmqctl -n rabbit@node02 start_app


    更多
    為了大型集群上準(zhǔn)備這種配置,通常最佳實(shí)踐是使用分布式shell前端.
    最初, dsh只能應(yīng)用于IBM AIX,但在現(xiàn)代的Linux系統(tǒng)中,你可以找到pdsh和pdcp (通常在pdsh包中)命令來執(zhí)行同樣的操作。
    你也可以在老的或window上使用相似的前端工作(如dancer工具:http://www.netfort.gr.jp/~dancer/software/dsh.html.en).
    另外,你也可以使用你喜歡的集群管理軟件來執(zhí)行相同的操作.


    也可參考
    你可在http://www.rabbitmq.com/clustering.html找到更多關(guān)于集群指南的信息.

    自動添加一個RabbitMQ集群
    通常情況下,當(dāng)服務(wù)器啟動時,我們需要準(zhǔn)備加入集群的操作系統(tǒng)鏡像.通過一些腳本,我們可以很容易地實(shí)現(xiàn)這種任務(wù),但RabbitMQ提供了更簡單的更優(yōu)雅的方法。在本食譜中,我們將進(jìn)行介紹。
    準(zhǔn)備
    為了準(zhǔn)備這個食譜,我們至少兩臺已經(jīng)安裝RabbitMQ的主機(jī),并將它們配置為獨(dú)立broker.同時,這些主機(jī)還應(yīng)該有相同版本的RabbitMQ 和 Erlang.
    如何做
    在本食譜中,我們啟動了兩個高可用性RabbitMQ核心broker,它們滿足集群正常工作,具備高可靠性的最小條件 。然后,我們將其它所有節(jié)點(diǎn)配置為自動配置(通過在rabbitmq.config文件中編寫配置)。
    1. 配置服務(wù)器主機(jī)名已在Creating a simple cluster 食譜的步驟1 到 4中看過了.
    2. 為所有服務(wù)器配置相同的Erlang cookie.
    3. 在節(jié)點(diǎn)node01和node02上啟動RabbitMQ,并根據(jù)它們來創(chuàng)建一個集群,正如前面食譜中看過的
    .
    4.如果節(jié)點(diǎn)已經(jīng)被使用了,重設(shè)所有其它節(jié)點(diǎn)并停止,就像下面這樣:
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    5. 在所有其它節(jié)點(diǎn)上,設(shè)置RabbitMQ配置文件rabbitmq.config內(nèi)容(最后的圓點(diǎn)是配置文件的一部分):
    [{rabbit,
    [{cluster_nodes, {['rabbit@node01', 'rabbit@node02'],
    ram}}]}].
    6. 在所有節(jié)點(diǎn)上重啟RabbitMQ,如下所示:
    service rabbitmq-server start

    如何工作
    這種配置最適合在預(yù)先部署OS鏡像和RabbitMQ. 這些鏡像可以在不傷害現(xiàn)有集群的情況下進(jìn)行部署和使用.
    RabbitMQ在啟動時,會讀取
     rabbitmq.config文件. RabbitMQ將忽略該節(jié)點(diǎn)的集群自動配置,除非它是一個完全干凈的狀態(tài), 也就是要啟用集群自動配置,需要滿足下面兩個條件中的任何一個:
    1. RabbitMQ實(shí)例已經(jīng)被重置和停止,正如步驟4中所展示的一樣 
    2. RabbitMQ實(shí)例已經(jīng)安裝且從沒有啟動過
    在后一種情況中,你不需要執(zhí)行步驟6,只需要將RabbitMQ配置文件放置到正確的位置,然后再啟動RabbitMQ (如果我們是以鏡像方式來運(yùn)行的,那么它將在服務(wù)器啟動時,自動運(yùn)行),隨后游戲就結(jié)束了。
    TIP
    默認(rèn)的RabbitMQ配置文件稱為rabbitmq.config,其位置根據(jù)安裝時配置是變化的.下面是典型的位置:
    1. /etc/rabbitmq/ (大多數(shù)分發(fā)是這樣)
    2. Rabbitmqdir/etc/rabbimq/ (Mac OSX)
    3. %APPDATA%\RabbitMQ\ (Windows)


    一旦節(jié)點(diǎn)啟動了,它就會重復(fù)地嘗試連接指定節(jié)點(diǎn),作為步驟5中列表節(jié)點(diǎn)元組的第一個元素.只要它成功連上了節(jié)點(diǎn)列表中的一個,它就會以RAM節(jié)點(diǎn)加入到集群中,即作為元組的第二個元素 (或者你也可以指定一個磁盤節(jié)點(diǎn)).

    介紹消費(fèi)者負(fù)載均衡器 
    為了有一個多節(jié)點(diǎn)的RabbitMQ集群, clients必須知道所有的IP地址,如果集群配置是動態(tài)的,clients應(yīng)該收到任何變化的通知。
    此外, clients可以使用一些方法聯(lián)系很少負(fù)載的clients.
    通常的解決方案是在集群的前端增加一個負(fù)載均衡器.
    負(fù)載均衡器可以硬件解決方案或軟件包,可在一般器上進(jìn)行安裝和配置.而且,也有多種不同的負(fù)載均衡技術(shù)
    , 下面是最相關(guān)的:
    1. Round-robin name servers
    2. TCP load balancers
    TCP 負(fù)載均衡器可作為:
    1. Proxy: 在這種情況下,所有連接的接受和執(zhí)行都在負(fù)載均衡器自身上執(zhí)行
    2. Direct Server Return (DSR): 只接受連接的初始化 (SYN),然后讓客戶端與服務(wù)器在后端直接連接,而不再進(jìn)行干預(yù)(明顯的優(yōu)勢在于伸縮性和性能)
    這并不是全部,但更深入的細(xì)節(jié)已經(jīng)超出了本書的范圍. 針對我們的目的來說,我們會使用TCP 軟件負(fù)載均衡器-Crossroads (http://crossroads.e-tunity.com/).
    當(dāng)其安裝后,clients將會對它進(jìn)行連接,它會將連接轉(zhuǎn)發(fā)到后端RabbitMQ服務(wù)器,正如下圖所示:

    準(zhǔn)備
    在本食譜中,我們需要三臺機(jī)器;兩臺用于RabbitMQ集群,一個用于安裝負(fù)載均衡器.
    在這種情況下,如果clients是從Internet發(fā)起連接的話,前面兩臺服務(wù)器不需要公網(wǎng)IP地址,負(fù)載均衡器有公網(wǎng)IP就足夠了
    .

    如何做
    在這個例子中,我們采用了兩個Linux Debian (IP為 192.168.10.2、192.168.10.3) 來作 RabbitMQ服務(wù)器,一臺Linux Centos作Crossroads (with IP 192.168.10.1).
    使用兩臺機(jī)器來創(chuàng)建 RabbitMQ集群的例子,我們已經(jīng)在創(chuàng)建簡單集群食譜中看過了.
    下面的步驟只針對Centos 機(jī)器(192.168.10.1):
    1. 為了編譯Crossroads, 你需要 C++ 編譯器和GNU make. 同時你也需要系統(tǒng)標(biāo)準(zhǔn)C包;執(zhí)行下面的命令來準(zhǔn)備機(jī)器:
    yum groupinstall "Development Tools"
    2. 然后, 執(zhí)行wget http://crossroads.e-tunity.com/downloads/crossroads-stable.tar.gz 下載最新的Crossroads的穩(wěn)定版本到你的源碼目錄中(如: /usr/local/src/),
    3. 使用下面的解壓命令:
    tar xvzf crossroads-stable.tar.gz
    4. 進(jìn)入解壓目錄,cd crossroads-2.74, 執(zhí)行make install, 然后等待… 最后會出現(xiàn)下面的截屏:

    5. 為RabbitMQ配置負(fù)載均衡器:
    xr -v --server tcp:0:5672 --backend 192.168.10.2:5672 --backend 192.168.10.3:5672 2>&1 >> /var/log/xr-rmq.log &
    6. 如果你啟用了RabbitMQ web管理插件(參考 Chapter 3,Managing RabbitMQ),你也可以為其創(chuàng)建一個負(fù)載均衡器:
    xr -v --server tcp:0:80 --backend 192.168.10.2:15672 --backend 192.168.10.3:15672 2>&1 >> /var/log/xr-web.log &
    7. 在瀏覽器中打開http://192.168.10.1.

    如何工作
    在創(chuàng)建簡單集群之后(步驟1),我們安裝并配置了負(fù)載均衡器;對于Crossroads,我們假設(shè)你使用的是Centos Linux distribution.跟隨步驟2到5,你可以編譯和安裝Crossroads, 然后你可以配置負(fù)載均衡器角色。最初,我們使用下面的命令來運(yùn)行crossroads的負(fù)載均衡器(步驟6):
    xr -v --server tcp:0:5672 --backend 192.168.10.2:5672 
    --backend 192.168.10.3:5672
    2>&1 >> /var/log/xr-rmq.log &
    xr –v server tcp:0:5672命令將5672端口(RabbitMQ默認(rèn)TCP端口)與服務(wù)器TCP監(jiān)聽器進(jìn)行了關(guān)聯(lián)--backend 參數(shù) 用于重定向連接,在我們這里,將會重定向到192.168.10.2:5672 and 192.168.10.3:5672.
    我們使用>>/var/log/xr-rmq.log將輸出寫到日志文件中.
    為了從負(fù)載均衡器訪問web管理插件,在步驟7中,我們使用15672端口又執(zhí)行另一個XR服務(wù)器.
    Crossroads 可使用不同的分發(fā)算法,但默認(rèn)情況下,它使用簡單的 round-robin 算法,這就是說,連接會均勻地重定向到每個后端服務(wù)器上。
    此時,你可以使用crossroadsIP代替服務(wù)器IP地址來運(yùn)行任何的RabbitMQ client示例.連接會自動地轉(zhuǎn)發(fā)到后端brokers上.
    在下章節(jié)中,我們將看到負(fù)載均衡器的使用和其它高可用方案.

    更多 
    Crossroads是簡單地Linux負(fù)載均衡器,可參考http://crossroads.etunity.com/documentation.xr 來了解全部信息。 另一種廣泛地負(fù)載均衡方案是HAProxy (http://haproxy.1wt.eu/)
    也可參考
    可閱讀章節(jié)-從客戶端來連接集群(http://www.rabbitmq.com/clustering.html)來了解詳情.
    創(chuàng)建集群客戶端
    當(dāng)你創(chuàng)建了簡單集群后,客戶端需要指定多個broker地址來連接broker.在本食譜中,我們將看到在RabbitMQ Java client中,如何使用多個地址來連接broker.
    注意:與集群前端負(fù)載均衡器不同,在那里并不需要指定多個地址,只需要指定前端均衡器地址即可。

    準(zhǔn)備
    你需要Java 1.6+和Apache Maven.
    如何做
    首先,你需要一個簡單集群
    然后,你可以使用下面的代碼來進(jìn)行連接:
    Address[] addrArr = new Address[]{ new Address("node01",portnode1), new Address("node02", portnode2)};
    connection = factory.newConnection(addrArr);

    如何工作
    在RabbitMQ包中,你可以傳遞多個host/IP給連接工廠.這種特性可用于小型和大型場景.例如,如果你有兩個節(jié)點(diǎn),并且你想避免使用DNS或負(fù)載均衡器,那么你可以直接在client中傳遞所有的broker地址. client會嘗試連接第一個地址,如果第一個地址連接失敗,client會在不拋出異常的情況下,繼續(xù)嘗試連接下一個地址。
    同樣的方案可應(yīng)用于更為復(fù)雜的架構(gòu).如,假設(shè)你有下面兩個主機(jī):
    1. myrmqcluster_production.internal.com
    2. myrmqcluster_maintenance.internal.com
    客戶端總是會連接production系統(tǒng),但如果production 系統(tǒng)正在維護(hù),clients會連接第二個地址.

    更多
    實(shí)際上,在沒有RabbitMQ集群的情況下,你也可以使用這種連接方法.在源碼Chapter06/Recipe06中,我們創(chuàng)建了一種虛擬算法來負(fù)載連接。 在這種情況下,你完全可以構(gòu)建兩個獨(dú)立的RabbitMQ實(shí)例.
    也可參考
    在下面的章節(jié)中,我們將看到如何通過混合集群,HA策略,客戶端技術(shù)來創(chuàng)建一個HA client.

    posted on 2016-06-15 20:54 胡小軍 閱讀(1947) 評論(2)  編輯  收藏 所屬分類: RabbitMQ

    FeedBack:
    # re: RabbitMQ-CookBook-Chapter6-Developing Scalable Applications 2016-06-17 00:27 fav
    學(xué)習(xí)中  回復(fù)  更多評論
      
    # re: RabbitMQ-CookBook-Chapter6-Developing Scalable Applications 2016-06-24 23:14 胡小軍
    @fav
    最近比較忙,今天晚上才把后面的翻譯完。有什么翻譯不對的地方,還請多多指教。希望在RabbitMQ的路上,大家一起前行。  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲欧洲国产日韩精品| 人妻视频一区二区三区免费| 成人a毛片免费视频观看| 国产成人精品久久亚洲高清不卡 | 久久久精品2019免费观看| 天黑黑影院在线观看视频高清免费| 一个人免费观看日本www视频| 亚洲av无码成人精品国产 | 亚洲免费在线播放| 久久精品亚洲精品国产色婷| 无码欧精品亚洲日韩一区| 亚洲av最新在线网址| 亚洲va无码手机在线电影| 久久夜色精品国产嚕嚕亚洲av| 久久久青草青青亚洲国产免观| 亚洲国产精品无码久久久秋霞2| 久久久无码精品亚洲日韩蜜桃| 亚洲一区二区三区首页| 亚洲日本视频在线观看| 亚洲AV无码专区在线亚| 国产偷国产偷亚洲清高APP| 免费人成网站永久| 91成人免费观看在线观看| 男女作爱在线播放免费网站| 1000部禁片黄的免费看| 成熟女人特级毛片www免费| 国产一精品一aⅴ一免费| 国产成人亚洲综合| 亚洲A∨无码无在线观看| ass亚洲**毛茸茸pics| 国产亚洲漂亮白嫩美女在线 | 亚洲一级毛片在线播放| 亚洲精品中文字幕| 一道本不卡免费视频| 久草视频在线免费看| aa级一级天堂片免费观看| 免费jlzzjlzz在线播放视频| 亚洲人成人无码网www电影首页| 亚洲精品国产手机| 羞羞视频网站免费入口| 日韩免费在线视频|