個(gè)人專題目錄
一徽诲、JMS簡(jiǎn)介
全稱:Java Message Service 中文:Java消息服務(wù)矾芙。
JMS是Java的一套API標(biāo)準(zhǔn)嘶是,最初的目的是為了使應(yīng)用程序能夠訪問(wèn)現(xiàn)有的MOM系統(tǒng)(MOM是Message Oriented Middleware的英文縮寫,指的是利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流冀膝,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成阿纤。);后來(lái)被許多現(xiàn)有的MOM供應(yīng)商采用账胧,并實(shí)現(xiàn)為MOM系統(tǒng)∈酰【常見(jiàn)MOM系統(tǒng)包括Apache的ActiveMQ找爱、阿里巴巴的RocketMQ、IBM的MQSeries泡孩、Microsoft的MSMQ车摄、BEA的RabbitMQ等。(并非全部的MOM系統(tǒng)都遵循JMS規(guī)范)】
基于JMS實(shí)現(xiàn)的MOM仑鸥,又被稱為JMS Provider吮播。
“消息”是在兩臺(tái)計(jì)算機(jī)間傳送的數(shù)據(jù)單位。消息可以非常簡(jiǎn)單眼俊,例如只包含文本字符串意狠;也可以更復(fù)雜,可能包含嵌入對(duì)象疮胖。
消息被發(fā)送到隊(duì)列中环戈∶瓢澹“消息隊(duì)列”是在消息的傳輸過(guò)程中保存消息的容器。消息隊(duì)列管理器在將消息從它的源中繼到它的目標(biāo)時(shí)充當(dāng)中間人院塞。隊(duì)列的主要目的是提供路由并保證消息的傳遞遮晚;如果發(fā)送消息時(shí)接收者不可用,消息隊(duì)列會(huì)保留消息拦止,直到可以成功地傳遞它县遣。
消息隊(duì)列的主要特點(diǎn)是異步處理,主要目的是減少請(qǐng)求響應(yīng)時(shí)間和解耦汹族。所以主要的使用場(chǎng)景就是將比較耗時(shí)而且不需要即時(shí)(同步)返回結(jié)果的操作作為消息放入消息隊(duì)列萧求。同時(shí)由于使用了消息隊(duì)列,只要保證消息格式不變顶瞒,消息的發(fā)送方和接收方并不需要彼此聯(lián)系夸政,也不需要受對(duì)方的影響,即解耦和搁拙。如:
跨系統(tǒng)的異步通信秒梳,所有需要異步交互的地方都可以使用消息隊(duì)列。就像我們除了打電話(同步)以外箕速,還需要發(fā)短信,發(fā)電子郵件(異步)的通訊方式朋譬。
多個(gè)應(yīng)用之間的耦合盐茎,由于消息是平臺(tái)無(wú)關(guān)和語(yǔ)言無(wú)關(guān)的,而且語(yǔ)義上也不再是函數(shù)調(diào)用徙赢,因此更適合作為多個(gè)應(yīng)用之間的松耦合的接口字柠。基于消息隊(duì)列的耦合狡赐,不需要發(fā)送方和接收方同時(shí)在線窑业。
在企業(yè)應(yīng)用集成(EAI)中,文件傳輸枕屉,共享數(shù)據(jù)庫(kù)常柄,消息隊(duì)列,遠(yuǎn)程過(guò)程調(diào)用都可以作為集成的方法搀擂。
應(yīng)用內(nèi)的同步變異步西潘,比如訂單處理,就可以由前端應(yīng)用將訂單信息放到隊(duì)列哨颂,后端應(yīng)用從隊(duì)列里依次獲得消息處理喷市,高峰時(shí)的大量訂單可以積壓在隊(duì)列里慢慢處理掉。由于同步通常意味著阻塞威恼,而大量線程的阻塞會(huì)降低計(jì)算機(jī)的性能品姓。
消息驅(qū)動(dòng)的架構(gòu)(EDA)寝并,系統(tǒng)分解為消息隊(duì)列,和消息制造者和消息消費(fèi)者腹备,一個(gè)處理流程可以根據(jù)需要拆成多個(gè)階段(Stage)食茎,階段之間用隊(duì)列連接起來(lái),前一個(gè)階段處理的結(jié)果放入隊(duì)列馏谨,后一個(gè)階段從隊(duì)列中獲取消息繼續(xù)處理别渔。
應(yīng)用需要更靈活的耦合方式,如發(fā)布訂閱惧互,比如可以指定路由規(guī)則哎媚。
跨局域網(wǎng),甚至跨城市的通訊喊儡,比如北京機(jī)房與廣州機(jī)房的應(yīng)用程序的通信拨与。