2019-03-05

什么是jms

jms(java message service) Java消息服務(wù), jms是一種規(guī)范是jdk底層定義的, 各大廠商對(duì)這個(gè)規(guī)范都是實(shí)現(xiàn)的技術(shù).

jms作用:

在分布式系統(tǒng)當(dāng)中, 系統(tǒng)和系統(tǒng)之間進(jìn)行異步消息傳遞.

同步通訊技術(shù):

代表的技術(shù)有: dubbo, springCloud, webService

技術(shù)特點(diǎn): 例如controller中調(diào)用多個(gè)service, 每個(gè)service的執(zhí)行要等待上一行代碼執(zhí)行完成后才會(huì)繼續(xù)執(zhí)行

下一行代碼.

優(yōu)點(diǎn): 實(shí)時(shí)性比較好, 因?yàn)閏ontroller調(diào)用service, 然后service就去立即執(zhí)行

缺點(diǎn): 執(zhí)行速度慢, 因?yàn)榇a執(zhí)行的順序是串行執(zhí)行, 下一行的代碼執(zhí)行要等待上一行代碼執(zhí)行完成后方可執(zhí)行.

異步通訊技術(shù):

代表的技術(shù)有: jms一系列的, activemq, rabbitmq, rokitmq, zeromq, kafka等

技術(shù)特點(diǎn): 例如controller將消息發(fā)送給消息服務(wù)器, 消息服務(wù)器接收到消息后, 會(huì)以廣播的形式發(fā)給其他處理

具體業(yè)務(wù)的服務(wù)器. 其他具體處理業(yè)務(wù)的服務(wù)器接收到消息后就會(huì)根據(jù)消息完成工作.

優(yōu)點(diǎn): 將以前串行執(zhí)行的業(yè)務(wù)可以改為并行執(zhí)行, 處理速度會(huì)比以前快, 能夠更合理的分配每臺(tái)計(jì)算機(jī)的性能.

缺點(diǎn): 如果消息服務(wù)器正處于繁忙狀態(tài), 那么處理發(fā)消息的任務(wù)可能不及時(shí). 所以對(duì)實(shí)時(shí)性要求不高的業(yè)務(wù)可以使用

這個(gè)技術(shù).

消息中間件技術(shù)分類:使用的時(shí)候用封裝之后的jmsTemplet,它是spring全家桶的一份子,不論使用哪一個(gè)他們底層都是調(diào)用的各自的客戶端工具包,所有會(huì)使用一個(gè)其他的都可以使用了

activeMq: 是apache公司的, 一個(gè)老牌的消息中間件, 性能均衡, 不是最快的, 傳遞數(shù)據(jù)的安全性也不是最好的.

RabbitMQ: 阿里巴巴公司生產(chǎn)的, 它比較安全. 因?yàn)檫@個(gè)中間件有分布式消息級(jí)別事務(wù)功能.

ZeroMQ: 史上最快的隊(duì)列系統(tǒng)

Kafka: 史上最快的消息中間件技術(shù), 可以達(dá)到單機(jī)每秒10萬(wàn)的吞吐量

消息中間件支持的傳輸數(shù)據(jù)對(duì)象的類型:

TextMessage--一個(gè)字符串對(duì)象

MapMessage--一套名稱-值對(duì)

ObjectMessage--一個(gè)序列化的 Java 對(duì)象

BytesMessage--一個(gè)字節(jié)的數(shù)據(jù)流

StreamMessage -- Java 原始值的數(shù)據(jù)流

消息中間件支持的兩種發(fā)送模式:

點(diǎn)對(duì)點(diǎn)(Queue): 一個(gè)消息發(fā)送方, 一個(gè)消息接收方. 相當(dāng)于qq的私聊

如果是多個(gè)發(fā)送方, 一個(gè)接收方也算點(diǎn)對(duì)點(diǎn)模式

訂閱發(fā)布模式(Topic): 一個(gè)消息發(fā)送方, 多個(gè)消息接收方. 相當(dāng)于qq的群聊.

如果多個(gè)發(fā)送方, 多個(gè)接收方也算發(fā)布訂閱模式

activeMq中保證數(shù)據(jù)安全性機(jī)制(保證數(shù)據(jù)不會(huì)丟):

點(diǎn)對(duì)點(diǎn)模式:

a. 發(fā)送方將數(shù)據(jù)發(fā)送給消息服務(wù)器, 進(jìn)入消息服務(wù)器中的隊(duì)列

b. 消息服務(wù)器接收到消息后會(huì)從隊(duì)列中將數(shù)據(jù)發(fā)送給接收方

c. 如果接收方接收到數(shù)據(jù)后, 會(huì)返回響應(yīng)給消息服務(wù)器, 消息服務(wù)器接收到響應(yīng)后認(rèn)為接收成功

這個(gè)時(shí)候會(huì)將這個(gè)數(shù)據(jù)從隊(duì)列中刪除

d. 如果接收方處于宕機(jī)狀態(tài), 無(wú)法接收到數(shù)據(jù), 那么也就無(wú)法返回響應(yīng)給消息服務(wù)器, 消息服務(wù)器在

一段時(shí)間后沒(méi)有接受到接收方的響應(yīng), 則會(huì)認(rèn)為消息接收方宕機(jī), 會(huì)將數(shù)據(jù)從隊(duì)列中拿出來(lái)進(jìn)行持久化

保存到消息服務(wù)器的硬盤(pán)中, 每個(gè)一段時(shí)間會(huì)發(fā)送給消息接收方一次. 直到接收到消息接收方的響應(yīng)

則會(huì)認(rèn)為發(fā)送成功, 將持久化的數(shù)據(jù)刪除

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,136評(píng)論 1 32
  • 在分布式服務(wù)框架中,一個(gè)最基礎(chǔ)的問(wèn)題就是遠(yuǎn)程服務(wù)是怎么通訊的,在Java領(lǐng)域中有很多可實(shí)現(xiàn)遠(yuǎn)程通訊的技術(shù),例如:R...
    java菜閱讀 1,004評(píng)論 0 2
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 11,123評(píng)論 6 13
  • 按照宋鴻兵老師的金融環(huán)流說(shuō)法(現(xiàn)在很多人看一本《貨幣戰(zhàn)爭(zhēng)》就說(shuō)是小說(shuō),來(lái)黑宋鴻兵,你知道士別三日當(dāng)刮目相看嗎!),...
    叮宕閱讀 359評(píng)論 0 0
  • ‘天下不如意事,十常居七八’ 我看的小說(shuō)不多,而且有的還是看過(guò)很多遍,每次看到結(jié)尾時(shí)會(huì)翻回去再看看開(kāi)頭,這種就好像...
    仂七閱讀 308評(píng)論 0 0