小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

rabbitmq 消息件在idc機(jī)房監(jiān)控中的應(yīng)用 - 天狼星技術(shù)博客 - 淡定在黑暗和黎明時(shí)分!!!

 ShangShujie 2011-01-04


rabbitmq-server是一個(gè)消息中間件,由erlang語(yǔ)言寫(xiě)就。erlang號(hào)稱是能達(dá)到六西格瑪標(biāo)準(zhǔn)的電信級(jí)編程語(yǔ)言,時(shí)下很流行撒。IDC服務(wù)器監(jiān)控似乎跟這個(gè)東西風(fēng)馬牛不向及啊,呵呵,其實(shí)監(jiān)控本質(zhì)就是消息的傳送。這么就說(shuō)得通了。
進(jìn)程自動(dòng)監(jiān)控的想法是很早以前就有了,當(dāng)時(shí)的情況是這樣的:客服人員經(jīng)常晚上半夜三更給我打電話,說(shuō)系統(tǒng)慢啊,不可訪問(wèn)啊,其實(shí)我上去一看,90%的 問(wèn)題出在程序員寫(xiě)的Java程序上,現(xiàn)象非常討厭,進(jìn)程是存在的,日志照常甩出,端口依然存活,就是反映慢到死,這個(gè)問(wèn)題到現(xiàn)在也還是無(wú)解??!沒(méi)辦法,只 能夠重啟應(yīng)用程序,一重啟就好。這么做的次數(shù)多了,自己也煩不勝煩。于是就想出個(gè)偷懶的主意,能否讓客服自己來(lái)重啟進(jìn)程呢?當(dāng)然可以了,給客服個(gè)WEB頁(yè) 面,上面有重啟的連接,點(diǎn)擊即可。問(wèn)題也來(lái)了,頁(yè)面么,就用php可以搞定,但是涉及到要重啟進(jìn)程,php顯然是不適合做這件事的,理由如下:php運(yùn)行 的時(shí)候是繼承了apache設(shè)置的權(quán)限,缺省應(yīng)該是nobody,如果用suexec或者其他身份運(yùn)行,明顯就是為php提升了權(quán)限,這樣很可能會(huì)帶來(lái)大 問(wèn)題,不可取。比較可行的方法是:php發(fā)送消息到消息服務(wù)器,然后各服務(wù)器跟消息服務(wù)器通訊,取出各自的消息,再由本地進(jìn)程控制重啟。這樣漏洞比較少。 也沒(méi)有權(quán)限的危險(xiǎn)。
具體實(shí)現(xiàn)的架構(gòu)如下:
php提供展示頁(yè)面,調(diào)用stomp協(xié)議發(fā)送消息;rabbitmq做消息中間服務(wù)器,存儲(chǔ)并轉(zhuǎn)發(fā)消息;服務(wù)器端用Python來(lái)接收stomp消息,并調(diào)用shell命令執(zhí)行重啟等命令。結(jié)構(gòu)圖如下:

  


01   rabbitmq-server-1.5.5.tar.gz
02   rabbitmq-stomp-5ee5e2c0b64a.tar.bz2(不要下default.zip那個(gè)包,不能用)
03   Python-2.6.2.tgz
04  
05 mkdir -p /data/mq
06 cd /data/mq
08 tar jxvf Python-2.6.2.tar.bz2
09 cd Python-2.6.2
10 ./configure --prefix=/data/python262;make;make install
11 cd ..;rm -rf Python-2.6.2
13 tar zxvf otp_src_R13B.tar.gz
14 cd otp_src_R13B
15 ./configure --prefix=/data/erlang;make;make install
16 cd ..;rm -rf otp_src_R13B
17 export PATH=/data/python262/bin:/data/erlang/bin:$PATH
19 tar zxvf rabbitmq-server-1.5.5.tar.gz
20 ln -s rabbitmq-server-1.5.5 rabbitmq-server
21 cd rabbitmq-server
22 make all
23 cd ..;rm -rf rabbitmq-server-1.5.5.tar.gz
25 tar jxvf rabbitmq-stomp-5ee5e2c0b64a.tar.bz2
26 cd rabbitmq-stomp-5ee5e2c0b64a
27 make
28 cd ..;rm -rf rabbitmq-stomp-5ee5e2c0b64a.tar.bz2
29 vi rabbitmq-server/scripts/rabbitmq-server
30 SERVER_START_ARGS=
31 改成:
32 SERVER_START_ARGS='
33 -pa /data/mq/rabbitmq-stomp-5ee5e2c0b64a/ebin
34 -rabbit
35 stomp_listeners [{"0.0.0.0",61613}]
36 extra_startup_steps [{"STOMP-listeners",rabbit_stomp,kickstart,[]}]'
37 ./rabbitmq-server/scripts/rabbitmq-server -detached
38 #缺省的用戶是guest,密碼也是guest,這太不安全了,改之:
39 ./rabbitmq-server/scripts/rabbitmqctl delete_user guest
40 ./rabbitmq-server/scripts/rabbitmqctl add_user songxr Loveyou
41 ./rabbitmq-server/scripts/rabbitmqctl map_user_vhost songxr /

  這樣rabbitmq+stomp就配置好了。
搜遍了網(wǎng)上的php stomp客戶端,有好幾個(gè),都是一堆文件,其實(shí)我們只用到了一個(gè)最簡(jiǎn)單的功能,就是發(fā)送,干脆自己寫(xiě)了個(gè)函數(shù):

01 function sendmsg($host,$port,$login,$passcode,$timeout,$msg,$queue) {
02   $msg_connect = "CONNECTnlogin:$loginnpasscode:$passcodennx00";
03   $msg_send = "SENDndestination:$queuenreceipt:oknn$msgx00";
04   $msg_disconnect = "DISCONNECTnnx00";
05   if(!($r = fsockopen($host,$port))) return false;
06   stream_set_timeout($r, $timeout);
07   if(!fwrite($r, $msg_connect.$msg_send.$msg_disconnect)){
08           $md = stream_get_meta_data($r);
09           if($md['timed_out']) return false;
10   }
11   if(!('CONNECTED' == fread($r,9))){
12           $md = stream_get_meta_data($r);
13           if($md['timed_out']) return false;
14   }
15   fread($r,44);
16   $md = stream_get_meta_data($r);
17   if($md['timed_out']) return false;
18   if(!("RECEIPTnreceipt-id:ok" == fread($r,21))){
19           $md = stream_get_meta_data($r);
20           if($md['timed_out']) return false;
21   }
22   if (!(strstr(fgets($r,100),'access_refused'))) {
23           fclose($r);
24           return true;
25   }else{
26           fclose($r);
27           return false;
28   }
29 }

  發(fā)送端程序下載:mqphp.tar.gz

  各個(gè)客戶端的Python端采用Jason R Briggs的stomp類(lèi),加上daemon類(lèi)和實(shí)際執(zhí)行的server.py和shell腳本,一共四個(gè)文件:
接收端程序下載:mq.tar.gz

  用這個(gè)方法就可以遠(yuǎn)程管理機(jī)房的服務(wù)器進(jìn)程了,當(dāng)然最后別忘了為php程序加上口令密碼驗(yàn)證……

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多