HornetQ21中文用戶手冊_第1頁
HornetQ21中文用戶手冊_第2頁
HornetQ21中文用戶手冊_第3頁
HornetQ21中文用戶手冊_第4頁
HornetQ21中文用戶手冊_第5頁
已閱讀5頁,還剩227頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

HornetQ2.1用戶手冊

Puttingthebuzzinmessaging

目錄

Chapter1.法律聲明11

Chapter2.前言11

Chapter3.項(xiàng)目信息12

3.1.軟件下載12

3.2.其它相關(guān)信息12

Chapter4.消息的相關(guān)概念13

4.1.消息相關(guān)的概念13

4.2.消息的種類14

4.2.1.消息隊(duì)列模式14

4.2.2.消息的廣播/訂閱模式15

4.3.傳送的可靠性15

4.4.交易(Transactions)15

4.5.持久性(Durability)16

4.6.消息API和協(xié)議16

4.6.1.Java消息服務(wù)(JMS)16

4.6.2.專有的API16

4.6.3.RESTfulAPI17

4.6.4.STOMP17

4.6.5.AMQP17

4.7.高可獲得性(Availability)17

4.8.集群18

4.9.橋接(Bridge)和路由(Routing)18

Chapter5.總體架構(gòu)19

5.1.核心架構(gòu)19

5.2.將HornetQ嵌入到你的應(yīng)用程序中21

5.3.將HornetQ與JEE應(yīng)用服務(wù)器集成21

5.4.HornetQ作為獨(dú)立的服務(wù)(standalone)22

Chapter6.使用HornetQ服務(wù)23

6.1.服務(wù)的啟動(dòng)和停止24

6.2.服務(wù)器端JVM參數(shù)的設(shè)置24

6.3.服務(wù)器端的classpath24

6.4.LibraryPath25

6.5.系統(tǒng)變量25

6.6.配置文件25

6.7.JBossMicrocontainerBeans文件27

6.8.JBossAS4MBean服務(wù)30

6.9.主配置文件32

Chapter7.使用JMS32

7.1.一個(gè)簡單的訂購系統(tǒng)33

7.2.JMS服務(wù)的配置33

7.3.JNDI的配置34

7.4.程序代碼35

7.5.不使用JNDI而直接創(chuàng)建JMS的對象36

7.6.ClientID的設(shè)置38

7.7.設(shè)置DUPS_OK的BatchSize38

7.8.設(shè)置事務(wù)(Transaction)的BatchSize38

Chapter8.使用HornetQ內(nèi)核38

8.1.內(nèi)核消息系統(tǒng)的相關(guān)概念38

8.1.1.消息39

8.1.2.地址(Address)39

8.1.3.Queue40

8.1.4.ClientSessionFactory40

8.1.5.ClientSession40

8.1.6.ClientConsumer41

8.1.7.ClientProducer41

8.2.一個(gè)內(nèi)核的應(yīng)用實(shí)例41

Chapter9.JMS與內(nèi)核API之間的映射關(guān)系42

Chapter10.客戶端的Classpath43

10.1.使用HornetQ內(nèi)核的客戶端43

10.2.JMS客戶端44

10.3.需要JNDI的JMS客戶端44

Chapter11.例子44

11.1.JMS例子44

11.1.1.應(yīng)用層的失效備援(Failover)44

11.1.2.內(nèi)核橋(Bridge)例子45

11.1.3.瀏覽器(Browser)45

11.1.4.ClientKickoff45

11.1.5.客戶端的負(fù)載均衡45

11.1.6.集群分組45

11.1.7.集群隊(duì)列46

11.1.8.單機(jī)集群46

11.1.9.集群的Topic46

11.1.10.限制接收速率46

11.1.11.死消息(DeadLetter)46

11.1.12.延遲再發(fā)送47

11.1.13.轉(zhuǎn)移(Divert)47

11.1.14.持久訂閱(DurableSubscription)47

11.1.15.嵌入方式(Embedded)47

11.1.16.HTTP傳輸協(xié)議的支持47

11.1.17,直接實(shí)例化JMS對象47

11.1.18.攔截器(Interceptor)48

11.1.19.JAAS48

H.1.20.JMS橋(Bridge)48

11.1.21.JMX管理48

11.1.22.大消息48

11.1.23.最新值隊(duì)列48

11.1.24.分布式隊(duì)列的負(fù)載均衡48

11.1.25.管理49

11.1.26.管理通知49

11.1.27.消息計(jì)數(shù)器49

11.1.28.消息失效49

11.1.29.消息組49

11.130.消息組(例2)50

11.1.31.消息優(yōu)先級50

11.1.32.零接收緩沖50

11.133,帶有服務(wù)器數(shù)據(jù)復(fù)制的非事務(wù)失效備援50

11.1.34.分頁(paging)51

11.1.35.預(yù)先通知51

11.136.消息發(fā)送速度限制51

11.1.37.隊(duì)列51

11.1.38.Message再分配51

11.139.隊(duì)列請求51

11.1.40.帶消息選擇器(selector)的隊(duì)列51

11.1.41.節(jié)點(diǎn)連接重試51

11.1.42.請求/應(yīng)答52

11.1.43.定時(shí)消息52

11.1.44,安全52

11.1.45.發(fā)送通知52

11.1.46.SSL傳輸支持52

11.1.47.靜態(tài)消息選擇器52

11.1.48.使用JMS方法來配置靜態(tài)消息選擇器52

11.1.49.Stomp52

11.1.50.Stomp與WebSockets52

11.1.51.對稱型集群53

11.1.52.臨時(shí)隊(duì)列53

11.1.53.話題(Topic)53

11.1.54.話題體系(TopicHierarchy)53

11.1.55.話題選擇器例153

11.1.56.話題選擇器例253

11.1.57.帶有數(shù)據(jù)復(fù)制的事務(wù)性失效備援53

11.1.58.事務(wù)性會(huì)話53

11.1.59.XAHeuristic54

11.1.60.XA接收54

11.1.61.XA發(fā)送54

11.1.62.XA與事務(wù)管理器(transactionmanager)54

11.2.核心API的例子54

11.2.1,嵌入式54

11.3.JavaEE例子54

11.3.1.EJB/JMS事務(wù)54

11.3.2.HAJNDI(HighAvailability)54

11.3.3.資源適配器的配置(JCA)54

11.3.4.資源適配器運(yùn)程服務(wù)器的配置55

11.3.5.JMS橋(Bridge)55

11.3.6.MDB(消息驅(qū)動(dòng)Bean)55

11.3.7.Servlet傳輸55

11.3.8.ServletSSL傳輸55

11.3.9.XA恢復(fù)(recovery)55

Chapter12.使用通配符實(shí)現(xiàn)消息路由55

Chapter13.了解HornetQ通配符的語法56

Chapter14.過濾器表達(dá)式56

Chapter15.持久化57

15.1.配置綁定日志60

15.2.配置JMS日志60

15.3.配置消息日志60

15.4.關(guān)于關(guān)閉磁盤寫緩沖的重要說明63

15.5.安裝AIO64

15.6.配置HornetQ不使用持久化64

Chapter16.傳輸層的配置65

16.1.接收器(Acceptor)65

16.2.連接器(Connectors)66

16.3.在客戶端直接配置傳輸層67

16.4.配置Netty傳輸層68

16.4.1.配置NettyTCP68

16.4.2.配置NettySSL70

16.4.3,配置NettyHTTP71

16.4.4.配置NettyServlet71

Chapter17.失效連接的檢測74

17.1.服務(wù)器端對失效連接的清除74

17.1.1.關(guān)閉沒有被成功關(guān)閉的核心會(huì)話或JMS連接76

17.2.客戶端的故障檢測77

17.3.配置異步連接任務(wù)執(zhí)行78

Chapter18.配置資源管理器(ResourceManager)78

Chapter19.流控制78

19.1.接收者(consumer)流控制78

19.1.1.基于窗口的流控制78

,使用核心接口(CoreAPI)進(jìn)行流控制80

.使用JMS的流控制80

19.1.2.速率流控制81

,使用核心接口(CoreAPI)81

,使用JMS81

19.2.發(fā)送者(producer)的流控制82

19.2.1.基于窗口的流控制82

,使用核心接口(CoreAPI)82

.使用JMS82

.限定發(fā)送者窗口流控制83

19.2.2,速率流控制84

.使用核心接口(CoreAPI)84

,使用JMS84

Chapter20.發(fā)送與提交的保證85

20.1.事務(wù)保證85

20.2.非事務(wù)性消息發(fā)送的保證85

20.3.非事務(wù)性通知的保證86

20.4.異步發(fā)送通知86

20.4.1,異步發(fā)送通知87

Chapter21.消息再傳遞及未傳遞的消息87

21.1.延遲再傳遞88

21.1.1.延遲再傳遞的配置88

21.1.2,例子88

21.2.死信地址89

21.2.1.配置死信地址89

21.2.2.死信的屬性89

21.2.3.例子90

21.3.傳遞計(jì)數(shù)的持久化90

Chapter22.過期的消息90

22.1.過期消息的配置91

22.2.配置過期地址91

22.3.配置過期回收線程91

22.4.例子92

Chapter23.大消息92

23.1.服務(wù)器端的配置92

23.2.設(shè)定限制93

23.2.1.使用核心的API93

23.2.2.使用JMS93

23.3.大消息與流(stream)94

23.3.1.核心API中流的使用94

23.3.2.在JMS中使用流95

23.4.不使用流的方式96

23.5.在客戶端緩存大消息97

23.6.大消息例子97

Chapter24.分頁轉(zhuǎn)存97

24.1.分頁文件97

24.2.配置98

24.3.分頁轉(zhuǎn)存模式98

24.3.1.配置98

24.4.丟棄消息99

24.5.阻塞發(fā)送者(producer)99

24.6.對于有多個(gè)隊(duì)列綁定的地址的配置注意事項(xiàng)100

24.7.分頁轉(zhuǎn)存與消息的選擇器(selector)100

24.8.分頁轉(zhuǎn)存與瀏覽器101

24.9.分頁轉(zhuǎn)存與未通知的消息101

24.10.例子101

Chapter25.隊(duì)列屬性101

25.1.預(yù)定義的隊(duì)列101

25.2.使用接口(API)創(chuàng)建隊(duì)列102

25.3.通過地址設(shè)置來配置隊(duì)列屬性103

Chapter26.定期消息104

26.1.定期傳遞參數(shù)104

26.2.例子105

Chapter27.最新值隊(duì)列(Last-ValueQueues)105

27.1.最新值隊(duì)列的配置105

27.2.使用Last-Value參數(shù)105

27.3.例子106

Chapter28.消息分組106

28.1.使用核心接口107

28.2.使用JMS107

28.3.例子108

28.4.例子108

28.5.集群中的消息組108

28.5.1.集群消息組的最佳使用慣例109

28.5.2.集群消息組例子110

Chapter29.預(yù)先通知模式(pre-acknowledge)110

29.1.使用PRE_ACKNOWLEDGEIll

29.2.例子Ill

Chapter30.管理111

30.1.管理接口API112

30.1.1,核心管理接口112

,核心服務(wù)器管理112

.核心地址的管理114

.核心隊(duì)列的管理114

.其它核心資源的管理116

30.1.2.JMS管理接口117

.JMS服務(wù)器管理117

.JMS連接工廠的管理118

.JMS隊(duì)列管理119

.JMS話題(Topic)的管理120

30.2.使用JMX121

30.2.1.配置JMX121

.MBeanServer的配置122

30.2.2.例子122

30.3.使用核心接口123

30.3.1,配置核心管理124

30.4.使用JMS進(jìn)行管理125

30.4.1.配置JMS管理126

30.4.2.例子126

30.5.管理通知126

30.5.1.JMX通知126

30.5.2.核心消息通知126

,配置核心管理通知地址127

30.5.3.JMS消息通知127

30.5.4.例子128

30.6.消息計(jì)數(shù)器128

30.6.1.配置消息計(jì)數(shù)器129

30.6.2.例子130

30.7.通過JBoss應(yīng)用服務(wù)器的AdminConsole來管理HornetQ的資源130

30.7.1.JMS隊(duì)列131

30.7.2.JMS話題132

30.7.3.JMS連接工廠132

Chapter31.安全132

31.1.基于角色的地址安全132

31.2.安全套接字層(SSL)傳輸134

31.3.基本用戶身份信息(Credentials)135

31.4.更換安全管理器136

31.5.JAAS安全管理器136

31.5.1.例子137

31.6.JBoss應(yīng)用服務(wù)器安全管理器137

31.6.1.配置客戶端登錄138

31.7.集群用戶名/密碼的配置138

Chapter32.JavaEE和應(yīng)用服務(wù)器的集成138

32.1.配置消息Bean139

32.1.1.使用容器管理事務(wù)(CMT)140

32.1.2.使用Bean管理事務(wù)(BMT)142

32.1.3.在MDB中使用選擇器143

32.2.在JEE模塊內(nèi)發(fā)送消息144

32.3.MDB與接收池的大小146

32.4.配置JCA適配器147

32.4.1,適配器的全局參數(shù)149

32.4.2.適配器外部(outbound)配置151

32.4.3,適配器內(nèi)部(inbound)配置152

32.4.4.配置適配器訪問單獨(dú)的HornetQ服務(wù)器152

,配置內(nèi)部適配器153

.配置外部適配器154

.1.依賴的jar文件155

32.4.5,高可獲得性JNDI(HA-JNDI)155

32.4.6.XA恢復(fù)155

.XA恢復(fù)的配置156

.1.配置參數(shù)157

,例子158

Chapter33.JMS橋(Bridge)158

33.1.JMS橋的配置參數(shù)163

33.2.源和目的的連接工廠166

33.3.源和目的的目標(biāo)工廠166

33.4.服務(wù)質(zhì)量167

33.4.1.AT_MOST_ONCE167

33.4.2.DUPLICATES_OK167

33.4.3.ONCE_AND_ONLY_ONCE167

33.4.4.JMSbridge中的超時(shí)問題168

33.4.5,例子168

Chapter34.客戶端重新連接與會(huì)話恢復(fù)168

34.1.100%透明的會(huì)話恢復(fù)(re-attachment)168

34.2.會(huì)話重新連接169

34.3.重新連接/會(huì)話恢復(fù)的配置參數(shù)170

34.4.ExceptionListenersandSessionFailureListeners171

Chapter35.消息的轉(zhuǎn)發(fā)(divert)與分流171

35.1.唯一式轉(zhuǎn)發(fā)器172

35.2.不唯一轉(zhuǎn)發(fā)器173

Chapter36.核心橋174

36.1.橋的配置174

Chapter37.重復(fù)消息檢測178

37.1.在消息發(fā)送中應(yīng)用重復(fù)檢測179

37.2.配置重復(fù)ID緩存180

37.3.橋與重復(fù)檢測180

37.4.重復(fù)檢測與集群連接181

37.5.分頁轉(zhuǎn)存與重復(fù)檢測181

Chapter38.集群181

38.1.集群概述181

38.2.服務(wù)器發(fā)現(xiàn)182

38.2.1.廣播組182

38.2.2.發(fā)現(xiàn)組184

38.2.3.在服務(wù)器端定義發(fā)現(xiàn)組。184

38.2.4.客戶端的發(fā)現(xiàn)組185

,使用JMS時(shí)客戶端發(fā)現(xiàn)的配置方法185

,使用核心API的客戶端的配置186

38.3.服務(wù)器端消息的負(fù)載均衡187

38.3.1.配置集群連接187

38.3.2.集群用戶的安全信息190

38.4.客戶端負(fù)載均衡190

38.5.顯式指定集群服務(wù)器192

38.5.1.在客戶端指定服務(wù)器列表192

.使用JMS時(shí)指定服務(wù)器列表192

.使用核心接口指定服務(wù)器列表193

38.5.2.指定服務(wù)器列表以組成集群194

38.6.消息再分配195

38.7.集群拓?fù)浣Y(jié)構(gòu)196

38.7.1.對稱式集群196

38.7.2.鏈?zhǔn)郊?96

Chapter39.高可獲得性(HighAvailability)和失效備援(Failover)197

39.1.主要一備份對197

39.1.1,高可獲得性(HA)的模式197

.數(shù)據(jù)復(fù)制198

.1.配置198

.2,備份服務(wù)器與主服務(wù)器間的同步199

.存貯共享200

.1.配置201

.2.備份服務(wù)器與主服務(wù)器間的同步。201

39.2.失效備援的模式201

39.2.1,自動(dòng)客戶端失效備援202

,關(guān)于服務(wù)器的復(fù)制203

.失效備援時(shí)阻塞調(diào)用的處理204

.事務(wù)的失效備援處理204

.非事務(wù)會(huì)話的失效備援處理205

39.2.2.連接故障的通知205

39.2.3,應(yīng)用層的失效備援205

Chapter40.Llbaio平臺專有庫206

40.1.庫文件的編譯206

40.1.1.安裝要求206

40.1.2,開始編譯207

Chapter41.線程管理208

41.1.服務(wù)器端線程的管理208

41.1.1,服務(wù)器端可計(jì)劃線程池209

41.1.2.服務(wù)器通用線程池209

41.1.3.過期回收線程210

41.1.4.異步IO210

41.2.客戶端線程管理210

Chapter42.日志(Logging)211

42.1.與JBoss應(yīng)用服務(wù)器日志的關(guān)系212

Chapter43.嵌入式HornetQ212

43.1.POJO的初始化212

43.2.使用依賴注入框架214

43.3.連接嵌入式HornetQ215

43.3.1,核心接口215

43.3.2.JMS接口216

43.4.JMS嵌入式HornetQ的例子217

Chapter44.攔截操作217

44.1.實(shí)現(xiàn)攔截器217

44.2.配置攔截器217

44.3.客戶端攔截器218

44.4.例子218

Chapter45.互操作性218

45.1.Stomp218

45.1.1.內(nèi)建Stomp支持218

.限制219

45.1.2.Stomp目標(biāo)與HornetQ的地址和隊(duì)列的映射219

45.1.3.Stomp與JMS的互操作性219

,使用JMS目標(biāo)219

.使用JMS或核心接口發(fā)送和接收Stomp消息220

45.1.4.通過WebSockets使用Stomp220

45.1.5.StompConnect221

45.2.REST221

45.3.AMQP221

Chapter46.性能調(diào)優(yōu)221

46.1.持久層的優(yōu)化222

46.2.優(yōu)化JMS222

46.3.其它優(yōu)化223

46.4.傳輸層的優(yōu)化224

46.5.優(yōu)化虛擬機(jī)225

46.6.避免違背設(shè)計(jì)模式225

Chapter47.配置參數(shù)索引226

47.1.服務(wù)器配置226

47.1.1.hornetq-configuration.xml226

47.1.2.hornetq-jms.xml231

Chapter1.法律聲明

RedHat,Inc.以及其他公司2010年版權(quán)所有。

RedHat公司依照CC-BY-SA3.0Unported(CreativeCommonsAttribution-ShareAHke)條款之

規(guī)定授權(quán)用戶是用本手冊中的文字和插圖。

有關(guān)CC-BY-SA的解釋請?jiān)L問http:〃/licenses/by-sa/3.0/。根據(jù)CC—BY

-SA的規(guī)定,如果要發(fā)布本文檔或任何本文檔的修改版本,都必須給出原始版本文檔的

URLo

RedHat作為本文檔的授權(quán)方聲明在相關(guān)法律允許的最大范圍內(nèi)放棄CC-BY-SA第4d節(jié)所

規(guī)定的權(quán)利。

Chapter2.前言

什么是HometQ?

HornetQ是一個(gè)開源的軟件項(xiàng)目。它的目標(biāo)是一個(gè)多協(xié)議、可嵌入、高性能、可集群的異步

消息系統(tǒng)。

HornetQ是一個(gè)消息中間件(MoM)。有關(guān)MoM和其它消息相關(guān)的概念解釋請參見Chapter

4,消息的相關(guān)概念。

要了解有關(guān)HornetQ的更多信息請?jiān)L問

hup:〃/community/wiki/HornelQGeneralFAQs。

為什么要使用HornetQ?以下給出了幾個(gè)理由:

HornetQ是100%的開源軟件。HornetQ采用Apachev2.0開源協(xié)議,對用戶的限制最小。

HornetQ的設(shè)計(jì)強(qiáng)調(diào)可用性。

采用Java語言編寫??梢栽谌魏蜫ava6+的平臺上運(yùn)行。這幾乎包括了從Windows到IBM

mainframes的每個(gè)平臺。

性能出眾。不但對非持久化消息的處理性能達(dá)到了非常高的性能。獨(dú)特高效的日志(journal)

使持久消息處理接近非持久消息的性能。

功能全面。不僅擁有其它成熟消息產(chǎn)品所具有的全部功能,而且還有很多獨(dú)特的功能。

HornetQ的設(shè)計(jì)遵從了簡約的原則。對第三方軟件的依賴極少。根據(jù)不同的需要,HometQ

可以單獨(dú)運(yùn)行,也可以運(yùn)行于JEE應(yīng)用服務(wù)器中。它還可以嵌入到你自己的應(yīng)用程序中。

完美的可獲得性。HometQ提供自動(dòng)客戶端失效備援(automaticclientfailover)功能,能保

證在服務(wù)器故障時(shí)沒有消息丟失或消息重復(fù)。

超級靈活的集群方案。可以控制集群進(jìn)行消息負(fù)載均衡的方式。分布在不同地理位置的各個(gè)

集群間可以通過非可靠的網(wǎng)絡(luò)連接形成一個(gè)全球網(wǎng)絡(luò)。還可以非常靈活地配置消息路由。

請?jiān)L問wiki來全面了解HometQ的所有功能介紹。

Chapter3.項(xiàng)目信息

HornetQ的官方網(wǎng)址是/.

3.1.軟件下載

HometQ的下載地址為:/downloads.html

3.2.其它相關(guān)信息

HometQ的wiki

如果在使用HornetQ中發(fā)生任何問題,可以去我們的用戶論壇

如果你有開發(fā)方面的問題與想法,請?jiān)L問我們的開發(fā)論壇

請加入我們的IRC頻道與我們的核心開發(fā)工程師交流。

我們項(xiàng)目有自己的博客

還可以跟蹤我們的twitter

HometQ的Subversion代碼庫地址/repos/hometq/trunk

每次發(fā)布的版本標(biāo)簽都在/repos/hornetq/tags下能找到。

RedHat公司聘請全職工程師進(jìn)行HornetQ項(xiàng)目的開發(fā)工作,他們是:

TimFox(項(xiàng)目主管)

HowardGao

JeffMesnil

ClebertSuconic

AndyTaylor

另外我們還有長期的和剛加入的一些貢獻(xiàn)者,非常感^他們的幫助。參見完整的貢獻(xiàn)者名單。

Chapter4.消息的相關(guān)概念

HornetQ是一個(gè)異步的面向消息的中間件。在本文檔中我們簡稱為消息系統(tǒng)。

首先我們簡要介紹消息系統(tǒng)是做什么的,在哪些領(lǐng)域得到應(yīng)用,以及與消息相關(guān)的一些概念。

如果你已經(jīng)對消息系統(tǒng)的這些方面的知識很熟悉,可以跳過本章內(nèi)容。

4.1.消息相關(guān)的概念

消息系統(tǒng)可以將不同異種的系統(tǒng)松散地耦合在一起,提供基本的可靠性,事務(wù)及其它功能的

支持。

與基于遠(yuǎn)程過程調(diào)用(RPC)的系統(tǒng)不同,消息系統(tǒng)主要采用異步傳送的方式,請求與響應(yīng)

之間的耦合很松。大多數(shù)的消息系統(tǒng)也支持請求一響應(yīng)的方式,但這不是消息的主要功能。

端與端之間采用異步通信的好處是可以充分利用硬件資源,最大程度減少10操作引起的線

程阻塞,并充分利用網(wǎng)絡(luò)帶寬。而采用RPC方式,每一個(gè)請求必須要等待響應(yīng)返回才能繼

續(xù),因而要依賴你的網(wǎng)絡(luò)的速度(latency)。異步系統(tǒng)則能將消息以管道的方式傳送,它

只受帶寬的限制,并不因網(wǎng)絡(luò)速度而降低效率。利用異步的方式往往可以創(chuàng)建更高效率的應(yīng)

用。

消息系統(tǒng)將消息的發(fā)送方與接收方分開,使消息的發(fā)送所接收完全獨(dú)立于對方,有利于創(chuàng)建

靈活的、松耦的系統(tǒng)。

大型的企業(yè)應(yīng)用通常采用消息系統(tǒng)來實(shí)現(xiàn)一種消息總線,并基于這個(gè)總線將企業(yè)的各種不同

結(jié)構(gòu)的系統(tǒng)松散地連在一起工作。消息總線也常常是企業(yè)服務(wù)總線(ESB)的核心。采用這

種方式搭建的松耦合系統(tǒng)可以非常容易地?cái)U(kuò)展和修改。由于系統(tǒng)各模塊之間的信賴關(guān)系很

弱,所以在需要時(shí)可以對系統(tǒng)靈活地添加和減少模塊。

4.2.消息的種類

消息系統(tǒng)通常支持兩種異步的傳送模式:消息隊(duì)列(又稱為點(diǎn)對點(diǎn)消息傳送)模式和廣播

/訂閱模式。

4.2.1.消息隊(duì)列模式

在這種模式中消息被發(fā)送到隊(duì)列中。通常消息會(huì)被持久化以保證可靠的傳送。消息系統(tǒng)會(huì)將

隊(duì)列中的消息傳送給接收者(receiver或consumer)。當(dāng)接收者處理消息完成后,它會(huì)發(fā)出

完成的通知給消息系統(tǒng)。得到通知的消息就會(huì)從隊(duì)列中刪除,因此該消息不會(huì)被再次傳送。

如果在收到消息前消息服務(wù)器發(fā)生故障導(dǎo)致系統(tǒng)崩潰,當(dāng)系統(tǒng)恢復(fù)時(shí),該消息會(huì)被再次傳

送給接收者。

這種模式允許一個(gè)隊(duì)列有多個(gè)接收者。但是一個(gè)消息最多只傳送給一個(gè)接收者。一個(gè)隊(duì)列的

消息發(fā)送者(sender或producer)與接收者是完全獨(dú)立的。它們不知道彼此的存在。

圖書訂單系統(tǒng)是一個(gè)典型的消息隊(duì)列的用例。每一個(gè)訂單都被包裝為一個(gè)消息傳送到訂單隊(duì)

列中。假定有多個(gè)圖書訂購的終端向訂單隊(duì)列發(fā)關(guān)訂單消息。當(dāng)一個(gè)消息到達(dá)隊(duì)列時(shí)它被

持久化以防止系統(tǒng)崩潰時(shí)訂單的丟失。再假定有多個(gè)訂單處理中心分布在不同的機(jī)器上接

收這個(gè)訂單隊(duì)列的消息。消息系統(tǒng)將每一個(gè)消息發(fā)送給其中一個(gè)(并且只發(fā)送一個(gè))接收者

(即一個(gè)訂單處理模塊)。這樣不同的訂單可能會(huì)被不同的處理模塊處理,但一個(gè)訂單只會(huì)

被處理一次。

當(dāng)訂單處理模塊接收到一個(gè)消息,對它進(jìn)行處理后將訂單信息發(fā)送給倉庫系統(tǒng)并更新訂單數(shù)

據(jù)庫。處理完成后它會(huì)發(fā)出通知告訴服務(wù)器可以刪除此消息。通常這一系列和處理(接收,

發(fā)送給倉庫系統(tǒng),更新數(shù)據(jù)庫以及通知)會(huì)被作為一個(gè)交易來處理以保證它的完整性

(ACID)。

4.2.2.消息的廣播/訂閱模式

這種模式中,多個(gè)發(fā)送者將消息發(fā)送到服務(wù)器中一個(gè)特定的實(shí)體,JMS中通常稱為話題

(topic)o一個(gè)Topic常常有多個(gè)訂閱者(subscription,即消息的接收者)。

與消息隊(duì)列的接收者不同,每個(gè)訂閱者都會(huì)收到發(fā)送的隊(duì)列中的每個(gè)消息。

訂閱者可以選擇為固定的方式(durable)?采用這種方式的訂閱者,其消息會(huì)保留直到被接

收為止。即使是其間服務(wù)器發(fā)生過故障或重啟也不受影響。非固定的訂閱者只在其連接期間

有效,一但連接斷開其消息將不會(huì)保留。

電子消息訂閱是消息廣播模式的一個(gè)例子。當(dāng)新聞被世界各地的編輯編好后,他們將其發(fā)關(guān)

到新聞topic。同樣對這些新聞興趣的讀者會(huì)訂閱這個(gè)topic。消息系統(tǒng)將保證每個(gè)訂閱者都

能夠收到每一篇新聞稿。

4.3.傳送的可靠性

大多數(shù)的消息系統(tǒng)是可靠的消息傳送系統(tǒng)。消息系統(tǒng)可以保證一個(gè)消息被傳送給一個(gè)并且

只傳送給一個(gè)隊(duì)列的接收者或每個(gè)話題的固定的訂閱者。一個(gè)消息不會(huì)被傳送兩次。即使在

系統(tǒng)出現(xiàn)故障時(shí)也是如此。這一特性對于很多企業(yè)來說是非常重要的。比如你想要保證訂

單不丟失或被處理兩次以上,就可以利用該特性。

在某些情況下這種“一次并且只有一次''的傳送方式并不是很重要,重復(fù)消息和消息的丟失并

不影響系統(tǒng)的功能。比如股票價(jià)格的更新消息,它并不需要保證每次都能收到,因?yàn)榍耙?/p>

次更新很快就會(huì)被下一次代替。這樣的功能消息系統(tǒng)也可以支持。

4.4.交易(Transactions)

消息系統(tǒng)通常支持在一次本地交易中發(fā)送并通知多個(gè)消息。HornelQ還支持分布式交易。它

可以通過Java的XA和JTA接口,將消息的發(fā)送與通知做為一個(gè)分布式交易的一部分來完

成。

4.5.持久性(Durability)

消息可以分為持久消息和非持久消息。持久消息被保存到永久的存儲介質(zhì)中,不受服務(wù)器故

障與重啟的影響。非持久消息在服務(wù)器故障與重啟時(shí)則會(huì)丟失。像訂單,交易信息屬于持

久消息,而股票價(jià)格更新由于它的即時(shí)性則可以做為非持久消息來處理。

4.6.消息API和協(xié)議

客戶端的應(yīng)用程序怎樣訪問消息系統(tǒng)來進(jìn)行消息的發(fā)送與接收呢?

一些消息系統(tǒng)提供私有的API,客戶端可以通過這些私有的API與相應(yīng)的消息系統(tǒng)交互,實(shí)

現(xiàn)消息的收發(fā)。

除此之外,還存在著一些標(biāo)準(zhǔn)的交互方式可供使用。另外還有一些標(biāo)準(zhǔn)正在不斷完善。下面

我們就介紹一下這些標(biāo)準(zhǔn)。

Let'stakeabrieflookatthese:

4.6.1.Java消息服務(wù)(JMS)

JMS屬于Sun公司JEE規(guī)范的一部分。它定義了一套標(biāo)準(zhǔn)的API支持消息隊(duì)列和廣播一

訂閱模式。JMS是一套非常精簡的通用的標(biāo)準(zhǔn),它將當(dāng)時(shí)已經(jīng)存在的消息系統(tǒng)的共同功能

包括了進(jìn)去。

JMS是一個(gè)廣泛使用的API,絕大多數(shù)的消息系統(tǒng)都支持它。JMS只有Java的客戶端才可

以使用。

JMS并沒有定義傳輸?shù)母袷?wireformat)。因此不同的JMS消息服務(wù)器的和客戶端相互之

間通常不能交互,這是因?yàn)槊總€(gè)消息系統(tǒng)都自己的傳輸格式。

HometQ全面支持JMS1.1API。

4.6.2,專有的API

很多系統(tǒng)提供自己的一套API來與其消息系統(tǒng)進(jìn)行通迅,其優(yōu)勢是它可以允許客戶端使用

其全部的功能。像JMS那樣的標(biāo)準(zhǔn)API往往不能提供許多消息系統(tǒng)所支持的額外的功能。

HometQ提供了一套自有的核心API,客戶端程序可以通過它充分利用HornetQ的強(qiáng)大功能。

這對于一些JMSAPI滿足不了的需求是非常有用的。

4.6.3.RESTfulAPI

采用RESTREST[http:〃/wiki/Representational_State_Transfer]方式與消息系統(tǒng)

交互越來越被關(guān)注。

由于云計(jì)算技術(shù)的API標(biāo)準(zhǔn)目前傾向于采用REST的方式,所以采用REST方式的消息系統(tǒng)

很有望成為云計(jì)算中消息傳送的標(biāo)準(zhǔn)。

REST方式中的各種消息資源以URI的方式來定義。用戶通過一套很簡單的操作與這些資源

相交互,如PUT、POST、GET等。HTTP通常用來作為REST方式的通信協(xié)議。

采用HTTP的好處是它很簡單實(shí)用,并且internet經(jīng)過多年的發(fā)展已經(jīng)能很好的支持HTTP

協(xié)議。

HornetQ將會(huì)很快地支持REST方式的API。

4.6.4.STOMP

Stomp是為消息系統(tǒng)定義的一套簡單的文本傳輸協(xié)議。它定義了一種線上傳輸?shù)母袷?,?/p>

此采用Stomp編寫的客戶端可以與所有支持Stomp的消息系統(tǒng)交互。Stomp的客戶端可以用

多種編程語言來實(shí)現(xiàn)。

有關(guān)在HornetQ中如何使用Stomp的詳細(xì)內(nèi)容請參見Section45」,“Stomp”。

4.6.5.AMQP

AMQP是一套可支持互操作的消息規(guī)范。它定義了自己的傳輸格式,因些任何AMQP的

客戶端都可以和支持AMQP的系統(tǒng)進(jìn)行交互。AMQP的客戶端可以用多種編程語言來實(shí)現(xiàn)。

HornetQ將會(huì)很快地支持AMQP。

4.7.高可獲得性(Availability)

高可獲得性是指在系統(tǒng)中有一個(gè)或多個(gè)服務(wù)器發(fā)生故障時(shí)仍然能夠維持運(yùn)轉(zhuǎn)的特性。不同的

消息系統(tǒng)對高可獲得性的支持程度是不同的。

HometQ支持自動(dòng)失效備援(failover),也就是當(dāng)主服務(wù)器出現(xiàn)故障時(shí),當(dāng)前的會(huì)話會(huì)自動(dòng)

連接到備用的服務(wù)器上。

Chapter39,高可獲得性(HighAvailability)和失效備援(Failover)給出了HometQ的HA

特性的詳細(xì)信息。

4.8.集群

許多消息系統(tǒng)支持由多個(gè)消息服務(wù)器組成的集群。集群可以使發(fā)送和接收的負(fù)荷分散到不同

的服務(wù)器中。通過增加集群服務(wù)器,可以有效的增加整個(gè)集群處理消息的能力。

然而不同的消息系統(tǒng)有著不同的集群架構(gòu)。有的集群架構(gòu)十分簡單,有的集群中成員間的聯(lián)

系很少。

HometQ提供了非常先進(jìn)的可配置的集群模型。根據(jù)每個(gè)節(jié)點(diǎn)接收者(consumer)的多少以

及是否具有接收狀態(tài),消息在集群中可以進(jìn)行智能化負(fù)載均衡。

HornetQ還能夠在集群中的節(jié)點(diǎn)間進(jìn)行消息的再分發(fā),以避免在某個(gè)節(jié)點(diǎn)出現(xiàn)消息匱乏

(starvation)現(xiàn)象。

有關(guān)集群的詳細(xì)內(nèi)容參見Chapter38,集群。

4.9.橋接(Bridge)和路由(Routing)

有些消息系統(tǒng)可以將一些分散在不可靠的網(wǎng)絡(luò)(如廣域網(wǎng)或internet)上孤立的集群或節(jié)點(diǎn)

橋接在一起。

通常一個(gè)橋的作用是從一臺服務(wù)器的隊(duì)列上接收消息然后將消息再轉(zhuǎn)發(fā)到另一臺服務(wù)器的

隊(duì)列中。橋連接可以解決不可靠網(wǎng)絡(luò)連接的問題。橋有自動(dòng)重新連接的功能。一旦網(wǎng)絡(luò)連

接中斷,橋可以自動(dòng)進(jìn)行重試直到重新連接上為止。

HometQ的橋接功能可以配置過濾表達(dá)式,以實(shí)現(xiàn)有條件的轉(zhuǎn)發(fā)。另外,它還可以實(shí)現(xiàn)消息

轉(zhuǎn)換的功能(transformation)。

HornetQ還允許配置消息在隊(duì)列之間進(jìn)行路由。利用它可以完成復(fù)雜的路由網(wǎng)絡(luò)以便在不同

隊(duì)列間進(jìn)行消息轉(zhuǎn)發(fā)與復(fù)制,形成一個(gè)互連的消息代理(broker)網(wǎng)絡(luò)。

有關(guān)的詳細(xì)內(nèi)容將在Chapter36,核心橋和Chapter35,消息的轉(zhuǎn)發(fā)(divert)與分流給出。

Chapter5.總體架構(gòu)

本章對HornetQ的總體技術(shù)架構(gòu)進(jìn)行了概括描述。

5.1.核心架構(gòu)

HornetQ的核心是由一組簡單Java對象(POJO)構(gòu)成的。同時(shí)在設(shè)計(jì)HornetQ時(shí)將對外部

jar包的依賴降到最低限度。實(shí)際上HornetQ的核心部分只有一個(gè)外部依賴,就是netty.jar。

HornetQ使用了其中的用于緩沖的一些類。我們相信這樣的理念應(yīng)該受到用戶的歡迎。

由于依賴性很小,HornetQ可以非常容易地嵌入到其它應(yīng)用中,或者加入到一些依賴注入式

的框架中,如JBossMicrocontainer,Spring或GoogleGuice。

每個(gè)HornetQ服務(wù)器都有自己的超高性能的持久日志(journal)用于消息和其它信息的持久

化。

采用這種獨(dú)特的高效日志要比采用普通數(shù)據(jù)庫作為持久層的系統(tǒng)擁有更高的性能。

通常情況下分布在不同物理機(jī)器上的客戶端同時(shí)訪問HornetQ服務(wù)器。目前HornetQ提供了

兩套API供客戶端使用:

核心API。這是一組普通的Java接口,用它可以訪問HornetQ的全部功能。

JMS客戶端API。這是標(biāo)準(zhǔn)的JMSAPI。

實(shí)際上JMSAPI是在核心API的外部加上一層簡單的封裝。

在HomelQ內(nèi)核是沒有JMS的,這樣設(shè)計(jì)的目的是為了支持多個(gè)協(xié)議。

當(dāng)客戶端通過JMS接口訪問HornetQ時(shí),所有JMS的操作都被轉(zhuǎn)換成相應(yīng)的核心API,然

后將請求以HornetQ格式發(fā)向服務(wù)器。

HornetQ服務(wù)器只接收核心API的訪問。

圖3.1描述了這些操作。

User

Application2

在圖3.1中示出了兩個(gè)用戶訪問HornetQ服務(wù)器。用戶1使用JMSAPI,用戶2使用的是核

心APIo

圖中清楚的展示出了JMS是如何通過封裝(facade)轉(zhuǎn)化為核心API的。

5.2.將HornetQ嵌入到你的應(yīng)用程序中

如果你的應(yīng)用程序內(nèi)部需要消息服務(wù),但同時(shí)你又不想將消息服務(wù)暴露為單獨(dú)的HornetQ服

務(wù)器,你可以在應(yīng)用中直接將HornetQ實(shí)例化。

有關(guān)嵌入式HornetQ的詳細(xì)信息請參閱Chapter43,嵌入式HornetQ。

5.3.將HornetQ與JEE應(yīng)用服務(wù)器集成

HornetQ提供了標(biāo)準(zhǔn)的JCA適配器,利用它可以將HornetQ輕松地集成到任何一個(gè)符合JEE

規(guī)范的應(yīng)用服務(wù)器或servlet容器中。

JEE應(yīng)用服務(wù)品提供了消息Bean(MDB)用于處理來自外部的消息,比如來自JMS系統(tǒng)或

郵件系統(tǒng)的消息。

最常見的應(yīng)用應(yīng)該是用MDB來接收來自JMS系統(tǒng)中的消息了。在JEE規(guī)范中規(guī)定了JEE

應(yīng)用服務(wù)器使用JCAadaptor與JMS消息系統(tǒng)集成,MDB通過這個(gè)adaptor來接收消息。

JCAadaptor不僅可以用來接收消息,還可以用來從EJB或servlet中向外部的JMS發(fā)送消息。

在JEE應(yīng)用服務(wù)器中應(yīng)該用JCAadaptor與JMS系統(tǒng)進(jìn)行交互。實(shí)際上JEE規(guī)范中不允許

在JEE服務(wù)器中不通過JCA而直接訪問JMS系統(tǒng)。

在EJB中使用消息往往需要連接池或交易,而JCA可以提供這方面的服務(wù),無需額外的開

發(fā)任務(wù)。當(dāng)然直接訪問JMS系統(tǒng)是可能的,但是你將不能利用JCA所提供的這些有用的

功能,因此我們不建議使用直接訪問的方式。

圖3.2給出了HornelQ通過JCAadaptor與JEE應(yīng)用服務(wù)器集成的示意圖。圖中可以看出所

有的交互都通過JCAadaptor。

圖中帶有禁止符號的箭頭表明的是從EJB會(huì)話Bean直接訪問HornetQ的情況。由于不通過

JCA,這種方法往往造成每次EJB訪問HornetQ都要新建一個(gè)連接和會(huì)話,使效率大降低。

這被視為反設(shè)計(jì)模式(anti-pattern)。

Chapter32,JavaEE和應(yīng)用服務(wù)器的集成對如何使用JCA給出了更加詳細(xì)的描述。

5.4.HornetQ作為獨(dú)立的服務(wù)(standalone)

HometQ可以部署成為獨(dú)立的服務(wù)器。它可運(yùn)行于任何JEE應(yīng)用服務(wù)器之外,作為一個(gè)獨(dú)立

的服務(wù)運(yùn)行。作為獨(dú)立服務(wù)器運(yùn)行時(shí),HometQ消息服務(wù)器包括一個(gè)核心服務(wù)器,一個(gè)JMS

服務(wù)以及一個(gè)JNDI服務(wù)。

JMS服務(wù)用來部署服務(wù)器端hornetq-jms.xml配置文件中的JMSQueue,Topic和

ConnectionFactory實(shí)例。此外它還提供一組簡單的管理接口,通過這些接口可以創(chuàng)建、消

毀(destroy)Queue,Topic和ConnectionFactory實(shí)例。用于可以通過JMX或連接使用這

些接口。JMS服務(wù)是單獨(dú)的服務(wù),它不是HornetQ核心服務(wù)。HometQ的核心不包含JMS

相關(guān)的服務(wù)。如果你不需要通過服務(wù)器端的xml配置文件部署任何JMS對象,也不需要JMS

的管理接口,你可以選擇不啟動(dòng)該服務(wù)。

啟動(dòng)JNDI服務(wù)的目的是因?yàn)镴MS需要通過JNDI來獲得Queue,Topic以及

ConnectionFactoryo如果不需要,也可以選擇不啟動(dòng)該服務(wù)。

HometQ允許在客戶端程序中通過編程來直接創(chuàng)建各種JMS對象和核心對象來代替JNDI查

找,所以JNDI不是必需的。HornetQ采用JBossMicrocontainer來引導(dǎo)并實(shí)例化服務(wù),并

保證模塊之間的依賴關(guān)系oJBossMicrocontainer是一個(gè)輕量級的POJO引導(dǎo)器(bootstrapper)。

圖3.3給出了HornetQ獨(dú)立服務(wù)器的架構(gòu)。

JBossMicrocontainer

JNDIServer

HornetQcore

server

JMSService

相關(guān)配置的相關(guān)信息可以在第Section47.1,“服務(wù)器配置”找到。$

Chapter6.使用HornetQ服務(wù)

本章將介紹如何使用HometQ服務(wù)。

其中的內(nèi)容包括服務(wù)器的位置,如何啟動(dòng)和停止HornetQ服務(wù)器。本章還將解釋HometQ的

目錄結(jié)構(gòu),其中的文件及其用途。

本章中所提到的HornetQ服務(wù)器是指HornetQ默認(rèn)配置的獨(dú)立服務(wù)器,包含JMS服務(wù)和JNDI

服務(wù)。

對于運(yùn)行于JBoss應(yīng)用服務(wù)器中的HornetQ,其基本結(jié)構(gòu)是一樣的,只是有一些小的差別。

6.1.服務(wù)的啟動(dòng)和停止

在HornetQ的安裝目錄下bin子目錄中包含有一個(gè)unit/linux腳本run.sh和對應(yīng)的Windows

批處理文件run.bato

如果你是在Unix/Linux環(huán)境,在bin目錄下運(yùn)行./run.sh。

如果是在Windows環(huán)境,則在bin目錄下運(yùn)行run.bato

這個(gè)腳本文件會(huì)設(shè)置classpath以及各種JVM參數(shù),并啟動(dòng)JBossMicrocontainer。JBoss

Microcontainer是一個(gè)輕量級的容器。它被用來部署HornetQ的POJO對象。

要停止服務(wù),運(yùn)行其中的相應(yīng)腳本:在Unix/Linux環(huán)境下,運(yùn)行stop.sho在Windows環(huán)

境,運(yùn)行run.bato

注意HornetQ需要在Java6及以上版本才能正常運(yùn)行。

啟動(dòng)和停止腳本在默認(rèn)條件下讀取config/stand-alone/non-clustered目錄下的配置文件。如

果要指向其他目錄,可以在命令行實(shí)現(xiàn),例如:./run.sh../config/stand-alone/clusteredo這

一方法同樣適用于Windows批處理文件。

6.2.服務(wù)器端JVM參數(shù)的設(shè)置

在啟動(dòng)腳本run.sh和run.bat中設(shè)置了一些JVM參數(shù),這些參數(shù)主要是調(diào)整Java6的運(yùn)行

環(huán)境及拉圾回收的策略。我們建議采用并行拉圾回收的方法。這種方法可以將拉圾回收所

造成的延時(shí)進(jìn)行平均分配,有效減少由于拉圾回收引起的長時(shí)間暫停的情況。

默認(rèn)條件下HornetQ需要最大1GB的內(nèi)存空間。通過-Xms和?Xmx可以調(diào)整Java程序內(nèi)存

的使用。

你可以向啟動(dòng)腳本中添加其它的參數(shù)或修改已有的參數(shù),已滿足你的需要。

6.3.服務(wù)器端的classpath

HometQ在其classpath中尋找配置文件。

classpath被定義在run.sh和run.bat腳本中。在HometQ的發(fā)布中,啟動(dòng)腳本將非集群的配

置文件目錄加進(jìn)了classpath中。該目錄包括了一組配置文件,可以讓HornetQ以基本的非

集群方式運(yùn)行。它的具體位置是在HornetQ發(fā)布根目錄下config/stand-along/non-clustered/

子目錄。

在HornetQ的發(fā)布包中包括了一組標(biāo)準(zhǔn)的配置目錄,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論