第1章 消息传送机制基础 1
1.1消息传送机制的优点 3
1.1.1异构集成 3
1.1.2缓解系统瓶颈 3
1.1.3提高可伸缩性 4
1.1.4提高最终用户生产率 4
1.1.5体系结构灵活性和敏捷性 5
1.2企业消息传送 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发布/订阅模型 10
1.4JMS API 11
1.4.1点对点API 13
1.4.2发布/订阅API 14
1.5实际场景 14
1.5.1面向服务体系结构 15
1.5.2事件驱动体系结构 16
1.5.3异构平台集成 16
1.5.4企业应用集成 17
1.5.5企业到企业 17
1.5.6地理分散 18
1.5.7信息广播 18
1.5.8构建动态系统 18
1.6RPC和异步消息传送 21
1.6.1紧密耦合的RPC 21
1.6.2企业消息传送 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开发者分配的消息头 46
3.2消息属性 47
3.2.1应用程序特定的属性 47
3.2.2JMS定义的属性 49
3.2.3提供者特定的属性 50
3.3消息类型 50
3.3.1Message 50
3.3.2TextMessage 51
3.3.3ObjectMessage 52
3.3.4BytesMessage 53
3.3.5StreamMessage 56
3.3.6MapMessage 58
3.3.7只读消息 60
3.3.8客户端确认的消息 61
3.3.9消息的互操作性和可移植性 61
第4章 点对点消息传送模型 63
4.1点对点模型概览 63
4.1.1何时使用点对点消息传送模型 66
4.2QBorrower和QLender应用程序 67
4.2.1配置并运行应用程序 67
4.2.2QBorrower类 69
4.2.3QLender类 76
4.3消息关联 81
4.4动态队列对受管队列 83
4.5使用多个接收者实现负载均衡 84
4.6分析一个队列 85
第5章 发布/订阅消息传送模型 87
5.1发布/订阅模型概览 87
5.1.1何时使用发布/订阅消息传送模型 89
5.2TBorrower和TLender应用程序 90
5.2.1配置并运行应用程序 90
5.2.2TLender类 92
5.2.3TBorrower类 96
5.3持久订阅者和非持久订阅者 100
5.4动态订阅者和受管订阅者 101
5.5取消订阅动态持久订阅者 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优先级处理 116
6.3.4证券交易订单审计 117
6.4未传送语义 117
6.5设计注意事项 118
第7章 保证消息传送和事务 125
7.1保证消息传送 125
7.1.1消息自主性 126
7.1.2保存并转发消息传送 126
7.1.3消息确认和故障情况 126
7.2消息确认 127
7.2.1AUTO_ACKNOWLEDGE 127
7.2.2DUPS_OK_ACKNOWLEDGE 132
7.2.3CLIENT_ACKNOWLEDGE 132
7.3消息组和确认 133
7.3.1在应用程序中处理消息的重新传送 134
7.3.2消息组示例 134
7.3.3消息编组和多个接收者 143
7.4事务性消息 145
7.4.1创建并使用一个JMS事务 147
7.4.2事务性会话示例 147
7.4.3分布式事务 150
7.5丢失连接 151
7.5.1ExceptionListener示例 152
7.6停用消息队列 153
第8章 Java EE和消息驱动bean 155
8.1Java EE概览 155
8.1.1企业级JavaBean 156
8.2企业级JavaBean 3.0(EJB3)概览 157
8.2.1简化bean开发 158
8.2.2依赖注入 158
8.2.3简化回调方法 159
8.2.4通过编程方式默认 159
8.2.5拦截器 160
8.2.6Java持久性API 162
8.3Java EE中的JMS资源 162
8.3.1JNDI环境命名上下文(ENC) 164
8.4消息驱动bean 166
8.4.1并发处理和可伸缩性 168
8.4.2定义消息驱动bean 168
8.5消息驱动bean用例 171
8.5.1消息门面 171
8.5.2转换和路由选择 173
第9章 Spring和JMS 177
9.1Spring消息传送体系结构 177
9.2JmsTemplate概览 180
9.2.1send方法 181
9.2.2convertAndSend方法 181
9.2.3receive和receiveSelected方法 182
9.2.4receiveAndConvert方法 183
9.3连接工厂和JMS目的地 184
9.3.1使用JNDI 184
9.3.2使用本地类 187
9.4发送消息 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.1Spring消息侦听器容器 198
9.6.2MDP可选方案1:使用MessageListener接口 199
9.6.3MDP可选方案2:使用SessionAwareMessageListener接口 201
9.6.4MDP可选方案3:使用MessageListenerAdapter 202
9.6.5消息转换限制 207
9.7Spring JMS命名空间 208
9.7.1<jms:listener-container>消息属性 209
9.7.2<jms:listener>元素属性 211
第10章 部署注意事项 213
10.1性能、可伸缩性和可靠性 213
10.1.1确定消息吞吐量需求 213
10.1.2测试实际场景 214
10.2组播与否 217
10.2.1TCP/IP 218
10.2.2UDP 218
10.2.3IP组播 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桥接到其他消息传送系统 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过度使用消息优先级 240
11.3.3滥用消息头 240
附录AJava消息服务API 245
附录B消息头 265
附录C消息属性 277
附录D安装和配置ActiveMQ 285
索引 291