推荐序 I
前言 III
第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.4 JMS 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.6 RPC和异步消息传送 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.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 消息关联 81
4.4 动态队列对受管队列 83
4.5 使用多个接收者实现负载均衡 84
4.6 分析一个队列 85
第5章 发布/订阅消息传送模型 87
5.1 发布/订阅模型概览 87
5.1.1 何时使用发布/订阅消息传送模型 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 动态订阅者和受管订阅者 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.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 创建并使用一个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 企业级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.6 Java持久性API 162
8.3 Java EE中的JMS资源 162
8.3.1 JNDI环境命名上下文(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.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 发送消息 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 桥接到其他消息传送系统 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
附录A Java消息服务API 245
附录B 消息头 265
附录C 消息属性 277
附录D 安装和配置ActiveMQ 285
索引 291
展开