接手這個(gè)港口項(xiàng)目的時(shí)候,在網(wǎng)上翻遍了各類(lèi)專(zhuān)業(yè)論壇,沒(méi)有發(fā)現(xiàn)相似的項(xiàng)目解決方案,于是一點(diǎn)點(diǎn)查找資料,請(qǐng)教高手,按照自己的理解思路,一步一步,學(xué)習(xí)開(kāi)發(fā),目前一切進(jìn)展還算比較順利,在簡(jiǎn)書(shū)做一下自己學(xué)習(xí)過(guò)程中的點(diǎn)滴,方便以后學(xué)習(xí)和回憶。
總體的項(xiàng)目思路
項(xiàng)目背景,大型國(guó)企,大型港口集團(tuán),之間需要對(duì)接信息流,打通彼此之間的數(shù)據(jù)流,共享數(shù)據(jù),產(chǎn)生價(jià)值。
可行性方案前期調(diào)研
跨企業(yè)間傳遞信息,物流數(shù)據(jù)打通,最好最安全的方式就是MQ了。
但是市場(chǎng)上值得購(gòu)買(mǎi)的MQ的價(jià)格普遍不菲,簡(jiǎn)單查了一下,領(lǐng)導(dǎo)給的底線(xiàn)價(jià)格和預(yù)期的價(jià)格相差較大,遂放棄之。
研究第二種可行性,就是通過(guò)WebService 形式的接口互相調(diào)用彼此之間的數(shù)據(jù),但是這種方案有很多弊端,在網(wǎng)上簡(jiǎn)單查了查,列舉了一些,記錄一下。以下摘錄自 CSDN?lulu147的專(zhuān)欄
Webservice 和MQ(MessageQueue)都是解決跨平臺(tái)通信的常用手段,兩者有哪些區(qū)別呢?
個(gè)人認(rèn)為最本質(zhì)的區(qū)別在于 Webservice近乎實(shí)時(shí)通信,而MQ卻通常是延時(shí)通信。
什么意思呢?
因?yàn)閣ebservice其實(shí)就是本地服務(wù)器程序調(diào)用遠(yuǎn)程服務(wù)器上的方法,屬于兩者之間的交互,請(qǐng)求的時(shí)候需要等被請(qǐng)求的服務(wù)器做出回應(yīng)后,另一端才會(huì)有所動(dòng)作,也就是說(shuō),如果你請(qǐng)求的service服務(wù)器關(guān)閉了,或者中斷了,那么你這邊肯定就得不到答復(fù)了,你的這次請(qǐng)求就算是打水漂丟失了。而MQ 則相當(dāng)于是多了一個(gè)中間件

我所發(fā)送的請(qǐng)求 都必須先傳達(dá)給 這個(gè)消息隊(duì)列組件,然后由這個(gè)消息隊(duì)列組件再去到另一個(gè)服務(wù)器上去請(qǐng)求,有了響應(yīng)之后再 返回給
當(dāng)初的請(qǐng)求程序,因?yàn)镸essageQueue組件會(huì)把消息持久化放在本地,所以哪怕突然死機(jī)了,請(qǐng)求消息也是不會(huì)丟失的。
Message Queue屬于比較重量級(jí)的應(yīng)用,在規(guī)范化的企業(yè)流程中用的比較多。如果企業(yè)有很多部門(mén),部門(mén)都有自己的系統(tǒng),那么不同的系統(tǒng)之間的集成通信,Message Queue是很好的選擇。MQ一般都做為企業(yè)級(jí)IT應(yīng)用的中間件存在,有很多企業(yè)是作為標(biāo)準(zhǔn)IT基礎(chǔ)結(jié)構(gòu)存在的。在市面上常見(jiàn)的MQ中間件有IBM websphere message queue service,Oracle Advanced Queuing,Microsoft Message Queue(MSMQ),Apache ActiveMQ等
如果使用WebService的話(huà),就要寫(xiě)很多的WebService的代碼,去建立這些WebServcie,然后暴露出這些接口,相互之間調(diào)用,很費(fèi)事。但是如果使用Message Queue的話(huà),只要把這個(gè)中間件的服務(wù)器搭建起來(lái),只要在需要的時(shí)候加入不同的Queue Manager就可以了,然后就可以訪(fǎng)問(wèn)了,就可以作為不同系統(tǒng)之間的橋梁了。
長(zhǎng)耗時(shí)的報(bào)表,這個(gè)在程序中經(jīng)常遇見(jiàn),處理海量數(shù)據(jù)時(shí),可能生成一個(gè)報(bào)表需要5分中或是更長(zhǎng)的時(shí)間,客戶(hù)不能在線(xiàn)實(shí)時(shí)等待,報(bào)表處理比較耗費(fèi)資源,不能同時(shí)處理很多請(qǐng)求,甚至同時(shí)只允許處理一個(gè),這時(shí)就可以使用MQ??蛻?hù)端將報(bào)表請(qǐng)求和一些必要的報(bào)表?xiàng)l件放到Queue中,報(bào)表由另一個(gè)服務(wù)一個(gè)一個(gè)的處理,處理好后再給用戶(hù)發(fā)一個(gè)消息(MSN消息,或mail等)用戶(hù)再在瀏覽器或其他報(bào)表瀏覽器中查看報(bào)表。
在線(xiàn)商店,在客戶(hù)下訂單的過(guò)程后,系統(tǒng)只需做減庫(kù)存、記錄收貨人信息和必要的日志,其他的必須配送處理、交易統(tǒng)計(jì)等其他處理可以不同時(shí)完成,這時(shí)就可以將后續(xù)處理消息放入Queue中,讓另一臺(tái)(組)服務(wù)器去處理,這樣可以加快下訂單的過(guò)程,提高客戶(hù)的體驗(yàn);
WebService通常是實(shí)時(shí)性要求較高,Client端向Server端發(fā)出請(qǐng)求后,這是一個(gè)短連接,一個(gè)Http請(qǐng)求,這個(gè)請(qǐng)求發(fā)出后,Client端就會(huì)一直等到獲取到這個(gè)結(jié)果。但是使用MQ的話(huà),因?yàn)橛辛酥虚g的這一塊區(qū)域,當(dāng)請(qǐng)求發(fā)出后,Client端可以繼續(xù)去干別的事情。等到一段時(shí)間以后再去中間件的存儲(chǔ)區(qū)域上查看一下有結(jié)果了么,有了結(jié)果就取出來(lái),沒(méi)有的話(huà)就再等會(huì)再看。
其實(shí) MQ和WebService 應(yīng)用都可以解決跨企業(yè)不同系統(tǒng)之間數(shù)據(jù)互通的需求,但是差別還是蠻大的,最主要的其實(shí)回歸一點(diǎn)還是價(jià)格的問(wèn)題,一個(gè)是付費(fèi)的一個(gè)是開(kāi)源免費(fèi)的,所以如果企業(yè)對(duì)數(shù)據(jù)的安全和并發(fā)要求不是特別高可以嘗試先從WebService搭建一個(gè)簡(jiǎn)單的企業(yè)接口。下面4點(diǎn)是WebService?主要的優(yōu)勢(shì)所在
1 跨越防火墻的通信
客戶(hù)端和服務(wù)器端之間通信都會(huì)有防火墻或者代理服務(wù)器。傳統(tǒng)的實(shí)現(xiàn)互相通信的方法是在分布式對(duì)象,如DCOM、CORBA之間進(jìn)行相互的遠(yuǎn)程過(guò)程調(diào)用(TCP/IP),這樣的訪(fǎng)問(wèn)在internet上訪(fǎng)問(wèn)并沒(méi)有得到很好的體現(xiàn),而且有些訪(fǎng)問(wèn)還會(huì)受到防火墻的攔截。而Web服務(wù)使用基于XML消息處理作為基本的數(shù)據(jù)通信方式,應(yīng)用程序可以使用HTTP和XML消息等標(biāo)準(zhǔn)在基于Web的應(yīng)用程序之間交換信息,從而跨越防火墻。
2 應(yīng)用程序集成
企業(yè)里經(jīng)常要把不同語(yǔ)言寫(xiě)成的在不同平臺(tái)上運(yùn)行的各種程序集成起來(lái)。大型公司常常有很多部門(mén),每個(gè)部門(mén)都使用最適合自己特定需要的應(yīng)用程序和平臺(tái),所以可以利用webservice將各種平臺(tái)聯(lián)系在一起。
3 B2B的集成
跨公司的商務(wù)交易集成通常叫做B2B集成。各企業(yè)可以采用Web服務(wù)與其他企業(yè)進(jìn)行通信。通過(guò)Web服務(wù)能夠?qū)?shù)據(jù)及應(yīng)用程序的集成擴(kuò)展到公司的防火墻之外。使公司能夠與其伙伴、供應(yīng)商、發(fā)行商和客戶(hù)共享數(shù)據(jù)和商業(yè)過(guò)程,從而加強(qiáng)企業(yè)之間的合作關(guān)系。
4?軟件復(fù)用
軟件復(fù)用是在軟件開(kāi)發(fā)中避免重復(fù)勞動(dòng)的解決方案。Web服務(wù)實(shí)現(xiàn)了業(yè)務(wù)級(jí)別的軟件復(fù)用,例如在B2B的集成中,各企業(yè)之間通過(guò)互相調(diào)用Web服務(wù),就可以實(shí)現(xiàn)信息的共享和復(fù)用。
但是WebService 的缺點(diǎn)也很明顯,總結(jié)一下主要也是4點(diǎn)
(1)臃腫的注冊(cè)與發(fā)現(xiàn)機(jī)制
(2)低效的XML序列化手段
(3)開(kāi)銷(xiāo)相對(duì)較高的HTTP遠(yuǎn)程通信
(4)復(fù)雜的部署與維護(hù)手段
如果對(duì)于性能和并發(fā)要求不高的企業(yè)可以采用,我的項(xiàng)目確實(shí)也遇到了這些問(wèn)題,我會(huì)持續(xù)跟進(jìn),尋找解決平衡性能的最優(yōu)方法。
了解了webservice 的優(yōu)點(diǎn)和缺點(diǎn)可以使我們更加從容的面對(duì)項(xiàng)目開(kāi)發(fā),可以在源頭上避免犯一些致命的錯(cuò)誤,對(duì)項(xiàng)目整體的規(guī)劃也有了很好的支撐,在簡(jiǎn)書(shū)看到了非常好的介紹webservice 的一片文章,寫(xiě)的很詳細(xì),基本把webservice涉及的知識(shí)點(diǎn)都講到了,雖然現(xiàn)在對(duì)于這些重點(diǎn)內(nèi)容熟記于心,但是開(kāi)始那段時(shí)間確實(shí)很是迷茫,好在人多力量足。