黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

JMS&ActiveMQ教程
基于JMS的消息傳送
ActiveMQ與Spring集成
ActiveMQ與SpringBoot集成
ActiveMQ安全機(jī)制
ActiveMQ主從集群

JMS教程

Java消息服務(wù)JMS概述

兩個(gè)系統(tǒng)之間或者分布式系統(tǒng)之間的信息通信,是我們開(kāi)發(fā)中比較常見(jiàn)的場(chǎng)景,比如系統(tǒng)A要把信息發(fā)送給系統(tǒng)B,這個(gè)問(wèn)題我們應(yīng)該如何去處理?

1999年,原來(lái)的SUN公司領(lǐng)銜提出了一種面向消息的中間件服務(wù)--JMS規(guī)范(標(biāo)準(zhǔn))。(httpClient、hessian、dubbo、webservice、jms 五種)

JMS即Java消息服務(wù)(Java Message Service的簡(jiǎn)稱),是Java EE 的標(biāo)準(zhǔn)/規(guī)范之一。這種規(guī)范(標(biāo)準(zhǔn))指出:消息的發(fā)送應(yīng)該是異步的、非阻塞的,也就是說(shuō)消息的發(fā)送者發(fā)送完消息后就直接返回了,不需要等待接收者接收到消息后才能返回,發(fā)送者和接收者可以說(shuō)是互不影響。

所以這種規(guī)范(標(biāo)準(zhǔn))能夠減輕或消除系統(tǒng)瓶頸,實(shí)現(xiàn)系統(tǒng)之間去除耦合,提高系統(tǒng)的整體可伸縮性和靈活性。

JMS是Java EE中定義的一組標(biāo)準(zhǔn)API,它自身并不是一個(gè)消息服務(wù)系統(tǒng),它是消息傳送服務(wù)的一個(gè)抽象,也就是說(shuō)它定義了消息傳送的接口而并沒(méi)有具體實(shí)現(xiàn)。

Java EE已更名為Jakarta EE(雅加達(dá))

https://mmilinkov.wordpress.com/2018/02/26/and-the-name-is/

JMS規(guī)范發(fā)展歷程

JMS規(guī)范經(jīng)歷了多年的發(fā)展,并隨著Java EE進(jìn)行了幾次升級(jí),版本從1.0到最新的2.1,它們分別是:

Java EE 8 --> Java Message Service API 2.1

Java EE 7 --> Java Message Service API 2.0

Java EE 6 --> Java Message Service API 1.1

Java EE 5 --> Java Message Service API 1.1

J2EE1.4 --> Java Message Service API 1.1

JMS專業(yè)技術(shù)規(guī)范

JMS(Java Messaging Service)是Java平臺(tái)上有關(guān)面向消息中間件(MOM)的技術(shù)規(guī)范,它便于消息系統(tǒng)中的Java應(yīng)用程序進(jìn)行消息交換,并且通過(guò)提供標(biāo)準(zhǔn)的產(chǎn)生、發(fā)送、接收消息的接口簡(jiǎn)化企業(yè)應(yīng)用的開(kāi)發(fā),翻譯為Java消息服務(wù)。

JMS歷史

Java消息服務(wù)是一個(gè)在 Java標(biāo)準(zhǔn)化組織(JCP)內(nèi)開(kāi)發(fā)的標(biāo)準(zhǔn)(代號(hào)JSR 914)。2001年6月25日,Java消息服務(wù)發(fā)布JMS 1.0.2b,2002年3月18日J(rèn)ava消息服務(wù)發(fā)布 1.1,統(tǒng)一了消息域。

JMS體系架構(gòu)

JMS由以下元素組成。

JMS提供者:連接面向消息中間件的,JMS接口的一個(gè)實(shí)現(xiàn)。提供者可以是Java平臺(tái)的JMS實(shí)現(xiàn),也可以是非Java平臺(tái)的面向消息中間件的適配器。

JMS客戶:生產(chǎn)或消費(fèi)基于消息的Java的應(yīng)用程序或?qū)ο蟆?/p>

JMS生產(chǎn)者:創(chuàng)建并發(fā)送消息的JMS客戶。

JMS消費(fèi)者:接收消息的JMS客戶。

JMS消息:包括可以在JMS客戶之間傳遞的數(shù)據(jù)的對(duì)象

JMS隊(duì)列:一個(gè)容納那些被發(fā)送的等待閱讀的消息的區(qū)域。與隊(duì)列名字所暗示的意思不同,消息的接受順序并不一定要與消息的發(fā)送順序相同。一旦一個(gè)消息被閱讀,該消息將被從隊(duì)列中移走。

JMS主題:一種支持發(fā)送消息給多個(gè)訂閱者的機(jī)制。

JMS對(duì)象模型

JMS對(duì)象模型包含如下幾個(gè)要素: 

1. 連接工廠。連接工廠(ConnectionFactory)是由管理員創(chuàng)建,并綁定到JNDI樹(shù)中。客戶端使用JNDI查找連接工廠,然后利用連接工廠創(chuàng)建一個(gè)JMS連接。

2. JMS連接。JMS連接(Connection)表示JMS客戶端和服務(wù)器端之間的一個(gè)活動(dòng)的連接,是由客戶端通過(guò)調(diào)用連接工廠的方法建立的。

3. JMS會(huì)話。JMS會(huì)話(Session)表示JMS客戶與JMS服務(wù)器之間的會(huì)話狀態(tài)。JMS會(huì)話建立在JMS連接上,表示客戶與服務(wù)器之間的一個(gè)會(huì)話線程。

4. JMS目的。JMS目的(Destination),又稱為消息隊(duì)列,是實(shí)際的消息源。

5. JMS生產(chǎn)者和消費(fèi)者。生產(chǎn)者(Message Producer)和消費(fèi)者(Message Consumer)對(duì)象由Session對(duì)象創(chuàng)建,用于發(fā)送和接收消息。

6. JMS消息通常有兩種類型:

① 點(diǎn)對(duì)點(diǎn)(Point-to-Point)。在點(diǎn)對(duì)點(diǎn)的消息系統(tǒng)中,消息分發(fā)給一個(gè)單獨(dú)的使用者。點(diǎn)對(duì)點(diǎn)消息往往與隊(duì)列(javax.jms.Queue)相關(guān)聯(lián)。

② 發(fā)布/訂閱(Publish/Subscribe)。發(fā)布/訂閱消息系統(tǒng)支持一個(gè)事件驅(qū)動(dòng)模型,消息生產(chǎn)者和消費(fèi)者都參與消息的傳遞。生產(chǎn)者發(fā)布事件,而使用者訂閱感興趣的事件,并使用事件。該類型消息一般與特定的主題(javax.jms.Topic)關(guān)聯(lián)。

JMS消息模型

1. Java消息服務(wù)應(yīng)用程序結(jié)構(gòu)支持兩種模型:

• 點(diǎn)對(duì)點(diǎn)或隊(duì)列模型

•  發(fā)布者/訂閱者模型

2. 在點(diǎn)對(duì)點(diǎn)或隊(duì)列模型下,一個(gè)生產(chǎn)者向一個(gè)特定的隊(duì)列發(fā)布消息,一個(gè)消費(fèi)者從該隊(duì)列中讀取消息。這里,生產(chǎn)者知道消費(fèi)者的隊(duì)列,并直接將消息發(fā)送到消費(fèi)者的隊(duì)列。這種模式被概括為:

• 只有一個(gè)消費(fèi)者將獲得消息

• 生產(chǎn)者不需要在接收者消費(fèi)該消息期間處于運(yùn)行狀態(tài),接收者也同樣不需要在消息發(fā)送時(shí)處于運(yùn)行狀態(tài)。

•  每一個(gè)成功處理的消息都由接收者簽收

3. 發(fā)布者/訂閱者模型支持向一個(gè)特定的消息主題發(fā)布消息。0或多個(gè)訂閱者可能對(duì)接收來(lái)自特定消息主題的消息感興趣。在這種模型下,發(fā)布者和訂閱者彼此不知道對(duì)方。這種模式好比是匿名公告板。這種模式被概括為:

• 多個(gè)消費(fèi)者可以獲得消息

• 在發(fā)布者和訂閱者之間存在時(shí)間依賴性。發(fā)布者需要建立一個(gè)訂閱(subscription),以便客戶能夠訂閱。訂閱者必須保持持續(xù)的活動(dòng)狀態(tài)以接收消息,除非訂閱者建立了持久的訂閱。在那種情況下,在訂閱者未連接時(shí)發(fā)布的消息將在訂閱者重新連接時(shí)重新發(fā)布。

• 使用Java語(yǔ)言,JMS提供了將應(yīng)用與提供數(shù)據(jù)的傳輸層相分離的方式。同一組Java類可以通過(guò)JNDI中關(guān)于提供者的信息,連接不同的JMS提供者。這一組類首先使用一個(gè)連接工廠以連接到隊(duì)列或主題,然后發(fā)送或發(fā)布消息。在接收端,客戶接收或訂閱這些消息。

JMS傳遞方式

JMS有兩種傳遞消息的方式。標(biāo)記為NON_PERSISTENT的消息最多投遞一次,而標(biāo)記為PERSISTENT的消息將使用暫存后再轉(zhuǎn)送的機(jī)理投遞。如果一個(gè)JMS服務(wù)離線,那么持久性消息不會(huì)丟失但是得等到這個(gè)服務(wù)恢復(fù)聯(lián)機(jī)時(shí)才會(huì)被傳遞。所以默認(rèn)的消息傳遞方式是非持久性的。即使使用非持久性消息可能降低內(nèi)務(wù)和需要的存儲(chǔ)器,并且這種傳遞方式只有當(dāng)你不需要接收所有的消息時(shí)才使用。

雖然JMS規(guī)范并不需要JMS供應(yīng)商實(shí)現(xiàn)消息的優(yōu)先級(jí)路線,但是它需要遞送加快的消息優(yōu)先于普通級(jí)別的消息。JMS定義了從0到9的優(yōu)先級(jí)路線級(jí)別,0是最低的優(yōu)先級(jí)而9則是最高的。更特殊的是0到4是正常優(yōu)先級(jí)的變化幅度,而5到9是加快的優(yōu)先級(jí)的變化幅度。舉例來(lái)說(shuō): topicPublisher.publish (message, DeliveryMode.PERSISTENT, 8, 10000); //Pub-Sub 或 queueSender.send(message,DeliveryMode.PERSISTENT, 8, 10000);//P2P  這個(gè)代碼片斷,有兩種消息模型,映射遞送方式是持久的,優(yōu)先級(jí)為加快型,生存周期是10000 (以毫秒度量)。如果生存周期設(shè)置為零,這則消息將永遠(yuǎn)不會(huì)過(guò)期。當(dāng)消息需要時(shí)間限制否則將使其無(wú)效時(shí),設(shè)置生存周期是有用的。

JMS定義了五種不同的消息正文格式,以及調(diào)用的消息類型,允許你發(fā)送并接收以一些不同形式的數(shù)據(jù),提供現(xiàn)有消息格式的一些級(jí)別的兼容性。

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

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

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

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

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

JMS應(yīng)用程序

ConnectionFactory 接口(連接工廠)

用戶用來(lái)創(chuàng)建到JMS提供者的連接的被管對(duì)象。JMS客戶通過(guò)可移植的接口訪問(wèn)連接,這樣當(dāng)下層的實(shí)現(xiàn)改變時(shí),代碼不需要進(jìn)行修改。管理員在JNDI名字空間中配置連接工廠,這樣,JMS客戶才能夠查找到它們。根據(jù)消息類型的不同,用戶將使用隊(duì)列連接工廠,或者主題連接工廠。

Connection 接口(連接)

連接代表了應(yīng)用程序和消息服務(wù)器之間的通信鏈路。在獲得了連接工廠后,就可以創(chuàng)建一個(gè)與JMS提供者的連接。根據(jù)不同的連接類型,連接允許用戶創(chuàng)建會(huì)話,以發(fā)送和接收隊(duì)列和主題到目標(biāo)。

Destination 接口(目標(biāo))

目標(biāo)是一個(gè)包裝了消息目標(biāo)標(biāo)識(shí)符的被管對(duì)象,消息目標(biāo)是指消息發(fā)布和接收的地點(diǎn),或者是隊(duì)列,或者是主題。JMS管理員創(chuàng)建這些對(duì)象,然后用戶通過(guò)JNDI發(fā)現(xiàn)它們。和連接工廠一樣,管理員可以創(chuàng)建兩種類型的目標(biāo),點(diǎn)對(duì)點(diǎn)模型的隊(duì)列,以及發(fā)布者/訂閱者模型的主題。

Session 接口(會(huì)話)

表示一個(gè)單線程的上下文,用于發(fā)送和接收消息。由于會(huì)話是單線程的,所以消息是連續(xù)的,就是說(shuō)消息是按照發(fā)送的順序一個(gè)一個(gè)接收的。會(huì)話的好處是它支持事務(wù)。如果用戶選擇了事務(wù)支持,會(huì)話上下文將保存一組消息,直到事務(wù)被提交才發(fā)送這些消息。在提交事務(wù)之前,用戶可以使用回滾操作取消這些消息。一個(gè)會(huì)話允許用戶創(chuàng)建消息,生產(chǎn)者來(lái)發(fā)送消息,消費(fèi)者來(lái)接收消息。

MessageConsumer 接口(消息消費(fèi)者)

由會(huì)話創(chuàng)建的對(duì)象,用于接收發(fā)送到目標(biāo)的消息。消費(fèi)者可以同步地(阻塞模式),或(非阻塞)接收隊(duì)列和主題類型的消息。

MessageProducer 接口(消息生產(chǎn)者)

由會(huì)話創(chuàng)建的對(duì)象,用于發(fā)送消息到目標(biāo)。用戶可以創(chuàng)建某個(gè)目標(biāo)的發(fā)送者,也可以創(chuàng)建一個(gè)通用的發(fā)送者,在發(fā)送消息時(shí)指定目標(biāo)。

Message 接口(消息)

是在消費(fèi)者和生產(chǎn)者之間傳送的對(duì)象,也就是說(shuō)從一個(gè)應(yīng)用程序傳送到另一個(gè)應(yīng)用程序。一個(gè)消息有三個(gè)主要部分:

• 消息頭(必須):包含用于識(shí)別和為消息尋找路由的操作設(shè)置。

• 一組消息屬性(可選):包含額外的屬性,支持其他提供者和用戶的兼容。可以創(chuàng)建定制的字段和過(guò)濾器(消息選擇器)。

• 一個(gè)消息體(可選):允許用戶創(chuàng)建五種類型的消息(文本消息,映射消息,字節(jié)消息,流消息和對(duì)象消息)。

• 消息接口非常靈活,并提供了許多方式來(lái)定制消息的內(nèi)容。

JMS提供者

要使用Java消息服務(wù),你必須要有一個(gè)JMS提供者,管理會(huì)話和隊(duì)列。既有開(kāi)源的提供者也有專有的提供者。

開(kāi)源的提供者包括:

• Apache ActiveMQ

• JBoss 社區(qū)所研發(fā)的 HornetQ

• Joram

• Coridan的MantaRay

• The OpenJMS Group的OpenJMS

專有的提供者包括:

• BEA的BEA WebLogic Server JMS

• TIBCO Software的EMS

• GigaSpaces Technologies的GigaSpaces

• Softwired 2006的iBus

• IONA Technologies的IONA JMS

• SeeBeyond的IQManager(2005年8月被Sun Microsystems并購(gòu))

•  webMethods的JMS+ -

• my-channels的Nirvana

• Sonic Software的SonicMQ

•SwiftMQ的SwiftMQ

• IBM的WebSphere MQ

JMS的優(yōu)勢(shì)

異步:JMS天生就是異步的,客戶端獲取消息的時(shí)候,不需要主動(dòng)發(fā)送請(qǐng)求,消息會(huì)自動(dòng)發(fā)送給可用的客戶端。

可靠:JMS保證消息只會(huì)傳遞一次。

全部教程
主站蜘蛛池模板: 亚洲欧美另类日本久久影院 | 欧美一级在线看 | 制服诱惑中文字幕 | 男女下面进视频免费 | 2020天天干 | 黄色免费看片网站 | 日韩系列在线 | 精品国产影院 | 男人午夜网站 | 国产99视频精品免费视频7 | 免费99精品国产自在现线观看 | 国产精品一区二区不卡的视频 | 亚洲国产成人久久一区二区三区 | 华人欧美国产在线精品 | 香蕉久久av一区二区三区 | 福利视频h | 在线观看91精品国产入口 | 中文字幕在线观看亚洲 | a级人体片免费观看网站 | 成a人v欧美综合天堂 | 丝袜美女足淫美足美脚网站 | 男人把女人靠到爽痛视频 | 伊人影视大全 | 亚洲人成绝费网站色ww | 天天做天天爽爽快快 | 春菜花在线中文字幕hd | 成人国产一区二区三区 | 日韩精品免费视频 | 婷婷人人爽人人爽人人片 | 日韩欧美视频在线 | 日本在线亚洲 | 手机看理论片 | 日本一二区视频 | 性欧美videofreel另类 | 男女男在线观看视频网站 | 三级网址日本 | 性欧美高清精品video | 国产成人精品免费视频网页大全 | 久久人人爽人人爽人人 | 久久伊人影视 | 天天干天天操天天舔 |