推薦序 I
前言 III
第1章 消息傳送機制基礎 1
1.1 消息傳送機制的優(yōu)點 3
1.1.1 異構集成 3
1.1.2 緩解系統(tǒng)瓶頸 3
1.1.3 提高可伸縮性 4
1.1.4 提高最終用戶生產率 4
1.1.5 體系結構靈活性和敏捷性 5
1.2 企業(yè)消息傳送 5
1.2.1 集中式體系結構 7
1.2.2 分散式體系結構 7
1.2.3 混合體系結構 8
1.2.4 以集中式體系結構作為模型 8
1.3 消息傳送模型 9
1.3.1 點對點模型 10
1.3.2 發(fā)布/訂閱模型 10
1.4 JMS API 11
1.4.1 點對點API 13
1.4.2 發(fā)布/訂閱API 14
1.5 實際場景 14
1.5.1 面向服務體系結構 15
1.5.2 事件驅動體系結構 16
1.5.3 異構平臺集成 16
1.5.4 企業(yè)應用集成 17
1.5.5 企業(yè)到企業(yè) 17
1.5.6 地理分散 18
1.5.7 信息廣播 18
1.5.8 構建動態(tài)系統(tǒng) 18
1.6 RPC和異步消息傳送 21
1.6.1 緊密耦合的RPC 21
1.6.2 企業(yè)消息傳送 23
第2章 編寫一個簡單的示例程序 25
2.1 聊天應用程序 25
2.1.1 從Chat示例開始 28
2.1.2 分析源代碼 30
2.1.3 會話和線程 39
第3章 深入剖析一條JMS消息 41
3.1 消息頭 42
3.1.1 自動分配的消息頭 43
3.1.2 開發(fā)者分配的消息頭 46
3.2 消息屬性 47
3.2.1 應用程序特定的屬性 47
3.2.2 JMS定義的屬性 49
3.2.3 提供者特定的屬性 50
3.3 消息類型 50
3.3.1 Message 50
3.3.2 TextMessage 51
3.3.3 ObjectMessage 52
3.3.4 BytesMessage 53
3.3.5 StreamMessage 56
3.3.6 MapMessage 58
3.3.7 只讀消息 60
3.3.8 客戶端確認的消息 61
3.3.9 消息的互操作性和可移植性 61
第4章 點對點消息傳送模型 63
4.1 點對點模型概覽 63
4.1.1 何時使用點對點消息傳送模型 66
4.2 QBorrower和QLender應用程序 67
4.2.1 配置并運行應用程序 67
4.2.2 QBorrower類 69
4.2.3 QLender類 76
4.3 消息關聯(lián) 81
4.4 動態(tài)隊列對受管隊列 83
4.5 使用多個接收者實現(xiàn)負載均衡 84
4.6 分析一個隊列 85
第5章 發(fā)布/訂閱消息傳送模型 87
5.1 發(fā)布/訂閱模型概覽 87
5.1.1 何時使用發(fā)布/訂閱消息傳送模型 89
5.2 TBorrower和TLender應用程序 90
5.2.1 配置并運行應用程序 90
5.2.2 TLender類 92
5.2.3 TBorrower類 96
5.3 持久訂閱者和非持久訂閱者 100
5.4 動態(tài)訂閱者和受管訂閱者 101
5.5 取消訂閱動態(tài)持久訂閱者 104
5.6 臨時主題 104
第6章 消息過濾 107
6.1 消息選擇器 109
6.1.1 標識符 110
6.1.2 常量 111
6.1.3 比較運算符 111
6.1.4 算術運算符 113
6.2 聲明一個消息選擇器 114
6.3 消息選擇器示例 116
6.3.1 管理HMO的索賠申請 116
6.3.2 關于存貨的特定報價通知 116
6.3.3 優(yōu)先級處理 116
6.3.4 證券交易訂單審計 117
6.4 未傳送語義 117
6.5 設計注意事項 118
第7章 保證消息傳送和事務 125
7.1 保證消息傳送 125
7.1.1 消息自主性 126
7.1.2 保存并轉發(fā)消息傳送 126
7.1.3 消息確認和故障情況 126
7.2 消息確認 127
7.2.1 AUTO_ACKNOWLEDGE 127
7.2.2 DUPS_OK_ACKNOWLEDGE 132
7.2.3 CLIENT_ACKNOWLEDGE 132
7.3 消息組和確認 133
7.3.1 在應用程序中處理消息的重新傳送 134
7.3.2 消息組示例 134
7.3.3 消息編組和多個接收者 143
7.4 事務性消息 145
7.4.1 創(chuàng)建并使用一個JMS事務 147
7.4.2 事務性會話示例 147
7.4.3 分布式事務 150
7.5 丟失連接 151
7.5.1 ExceptionListener示例 152
7.6 停用消息隊列 153
第8章 Java EE和消息驅動bean 155
8.1 Java EE概覽 155
8.1.1 企業(yè)級JavaBean 156
8.2 企業(yè)級JavaBean 3.0(EJB3)概覽 157
8.2.1 簡化bean開發(fā) 158
8.2.2 依賴注入 158
8.2.3 簡化回調方法 159
8.2.4 通過編程方式默認 159
8.2.5 攔截器 160
8.2.6 Java持久性API 162
8.3 Java EE中的JMS資源 162
8.3.1 JNDI環(huán)境命名上下文(ENC) 164
8.4 消息驅動bean 166
8.4.1 并發(fā)處理和可伸縮性 168
8.4.2 定義消息驅動bean 168
8.5 消息驅動bean用例 171
8.5.1 消息門面 171
8.5.2 轉換和路由選擇 173
第9章 Spring和JMS 177
9.1 Spring消息傳送體系結構 177
9.2 JmsTemplate概覽 180
9.2.1 Send方法 181
9.2.2 convertAndSend方法 181
9.2.3 receive和receiveSelected方法 182
9.2.4 receiveAndConvert方法 183
9.3 連接工廠和JMS目的地 184
9.3.1 使用JNDI 184
9.3.2 使用本地類 187
9.4 發(fā)送消息 189
9.4.1 使用send方法 190
9.4.2 使用convertAndSend方法 191
9.4.3 使用非默認JMS目的地 193
9.5 同步接收消息 195
9.6 消息驅動POJO 198
9.6.1 Spring消息偵聽器容器 198
9.6.2 MDP可選方案1:使用MessageListener接口 199
9.6.3 MDP可選方案2:使用SessionAwareMessageListener接口 201
9.6.4 MDP可選方案3:使用MessageListenerAdapter 202
9.6.5 消息轉換限制 207
9.7 Spring JMS命名空間 208
9.7.1 消息屬性 209
9.7.2 元素屬性 211
第10章 部署注意事項 213
10.1 性能、可伸縮性和可靠性 213
10.1.1 確定消息吞吐量需求 213
10.1.2 測試實際場景 214
10.2 組播與否 217
10.2.1 TCP/IP 218
10.2.2 UDP 218
10.2.3 IP組播 218
10.2.4 基于IP組播的消息傳送 219
10.2.5 關鍵要點 221
10.3 安全性 222
10.3.1 認證 222
10.3.2 授權 223
10.3.3 安全通信 224
10.3.4 防火墻和HTTP通道 224
10.4 連接外部世界 225
10.5 橋接到其他消息傳送系統(tǒng) 227
第11章 消息傳送設計注意事項 229
11.1 內部目的地與外部目的地 229
11.1.1 內部目的地拓撲結構 230
11.1.2 外部目的地拓撲結構 231
11.2 請求/應答消息傳送設計 232
11.3 消息傳送設計反模式 236
11.3.1 單用途隊列 236
11.3.2 過度使用消息優(yōu)先級 240
11.3.3 濫用消息頭 240
附錄A Java消息服務API 245
附錄B 消息頭 265
附錄C 消息屬性 277
附錄D 安裝和配置ActiveMQ 285
索引 291