第1章 RabbitMQ简介 1
8 J" a. g2 }' s3 O5 r1.1 什么是消息中间件 2
$ B# n8 O' T) H5 ~: k4 N- w2 k1.2 消息中间件的作用 31 G% n2 z9 {8 H! q' o; d/ c# ^
1.3 RabbitMQ的起源 4
: w1 P! p& g1 C; i. `1.4 RabbitMQ的安装及简单使用 6
1 H* V& [9 E/ V9 E! U+ ~0 P9 s1.4.1 安装Erlang 7. D5 B) \. A; x
1.4.2 RabbitMQ的安装 89 M5 l0 \4 ]; p: n. b2 u$ W
1.4.3 RabbitMQ的运行 8% q# S$ v U4 t
1.4.4 生产和消费消息 10" P7 q# j9 T2 c' E3 d3 R
1.5 小结 14
; h( o) y" N I) d' r- X第2章 RabbitMQ入门 155 |" ]; [5 A* L4 D# [6 h. K N
2.1 相关概念介绍 16" N; d5 |! ~$ o4 a6 D% I
2.1.1 生产者和消费者 16
$ k2 x$ E F' w/ O7 l* R2.1.2 队列 18( o* H2 E B: Y% G" I
2.1.3 交换器、路由键、绑定 19+ y1 }4 Q% z5 o# A/ K* l2 f' K
2.1.4 交换器类型 21
2 B# ^4 z1 Y0 H4 e8 L2 S( h8 p2.1.5 RabbitMQ运转流程 23
& ^; U* R- J5 \, H; {- e/ O8 m2.2 AMQP协议介绍 26) r+ R) Z6 n; k
2.2.1 AMQP生产者流转过程 27, X# `/ @ m' H4 j$ i
2.2.2 AMQP消费者流转过程 29
, _- x6 S% H% S: U0 y2.2.3 AMQP命令概览 30
% x. F5 N' R. x& p2 c1 T' G( F2.3 小结 324 }8 r" D7 O1 t. N3 i5 y8 e
第3章 客户端开发向导 33( ^( e1 p2 c. b! C9 g
3.1 连接RabbitMQ 34, v4 {# z- |1 p: c
3.2 使用交换器和队列 36/ v- _* e. F {: P$ V
3.2.1 exchangeDeclare方法详解 37" }# t- k! O- Y6 i* F! N% n2 d
3.2.2 queueDeclare方法详解 39. r* |! }1 D' R9 O5 r2 b; g6 y% @
3.2.3 queueBind方法详解 41
& ]% O# B) ~1 X9 t8 X( @/ m* m3.2.4 exchangeBind方法详解 423 W7 [& m5 n+ [+ n& f J2 ]) _
3.2.5 何时创建 43/ D% o) g% d8 E& l6 F5 L! o
3.3 发送消息 44
5 ]% O$ x! n" ]7 m3.4 消费消息 46
2 b& S | q% U4 e" |& o3.4.1 推模式 46
- n/ u- [' g$ T j3 b) v. L, t# c3.4.2 拉模式 49 j( z5 ~* d1 T! }0 b7 n1 u
3.5 消费端的确认与拒绝 50
% }) ?- |1 p1 e M3.6 关闭连接 52
+ V1 T4 R$ p7 H& C; |3.7 小结 54
. c1 b( ?% h w& G) o9 _第4章 RabbitMQ进阶 55
+ { Z8 S. m/ N$ A4 J7 l( Y4.1 消息何去何从 56* k- O. P1 R/ v" @* i3 N
4.1.1 mandatory参数 56! a( Y+ w; W0 l4 ?# m- t
4.1.2 immediate参数 57/ O0 J! f; [/ z# O* I$ o
4.1.3 备份交换器 58
8 W4 Y+ Q" E5 \' }0 y4.2 过期时间(TTL) 605 E7 P! U! r" q+ g! k9 z7 Q
4.2.1 设置消息的TTL 609 y3 K9 p4 N! X
4.2.2 设置队列的TTL 62
8 M; _5 b( y$ W4.3 死信队列 63! u+ H* j4 E: Z2 g o, ]
4.4 延迟队列 65' Y" _$ ?6 ]- @* Z: ]" s
4.5 优先级队列 67
( E4 q2 U% A3 z4.6 RPC实现 68( h6 B4 d# C; Q8 Y9 I# Z# W) x R
4.7 持久化 72
]7 l% v, b/ |& u7 c& D/ o4.8 生产者确认 74) d0 b$ V! ]+ k; l7 y0 S8 r& Q
4.8.1 事务机制 747 Z" z. p" `3 p$ Y1 ^3 E
4.8.2 发送方确认机制 77
6 d: z! v" K& f% J* c& O+ u4.9 消费端要点介绍 84
: e% V9 c. \* R v4.9.1 消息分发 85
5 Q b$ e7 Y- y( ]8 h5 w3 [! W4.9.2 消息顺序性 87- q5 l$ n8 |( ]& I! n
4.9.3 弃用QueueingConsumer 88
9 W" v! W4 d$ d C! g1 ]" P% h) t4.10 消息传输保障 900 S$ ` c& i* w0 ^* h4 ^
4.11 小结 911 Q3 O& u3 y6 Y( ~; {2 i! X) H
第5章 RabbitMQ管理 92- K7 n1 d3 g3 Q1 Q
5.1 多租户与权限 93* I; b& y- t- C: W3 n# r
5.2 用户管理 97
2 `: K8 X# |0 ?; o8 I1 t3 v5.3 Web端管理 99# i L: H4 I+ S# v, T3 g
5.4 应用与集群管理 1057 }2 u) n+ q$ c. l5 Y
5.4.1 应用管理 105" I: @4 s% N. ]# q
5.4.2 集群管理 1083 G/ o% u! F5 y9 L% D
5.5 服务端状态 111 M8 n9 F8 k# o2 ^- S! y4 k1 |* _
5.6 HTTP API接口管理 121
8 D2 J/ Z2 i: X6 i3 `3 B3 O5.7 小结 130! N: t# V. w7 c, u1 a
第6章 RabbitMQ配置 1312 O& f, P9 Z B- q8 H- j
6.1 环境变量 132
^" a0 U( O+ b* | v6 B6.2 配置文件 1364 H" T( I8 \- x. B$ n
6.2.1 配置项 137) f+ q) W& j# |8 ?3 z# a, a! D
6.2.2 配置加密 1402 Q( F! U {% W* A: [; i
6.2.3 优化网络配置 142
# c0 V4 A E+ i! P4 z- M; p4 t6.3 参数及策略 1461 a( k( |& t- p& m3 c$ s j: S, a
6.4 小结 151
/ z* H! ?) h8 U4 n( R* J9 `第7章 RabbitMQ运维 152* O( m0 Z$ ^" u1 K' c$ ]
7.1 集群搭建 153' K3 C% E* z/ H D! D
7.1.1 多机多节点配置 154( P2 J8 C% a( T! M9 _
7.1.2 集群节点类型 158
/ h6 X' H! G$ c& F' X; P8 m( Y7.1.3 剔除单个节点 1608 ^0 [$ A+ S, p6 L- n7 o% K5 J0 T. j
7.1.4 集群节点的升级 162* e) ^9 s+ S$ I$ V
7.1.5 单机多节点配置 163
' p! {) b- k( O: G* }6 h7.2 查看服务日志 164: j3 G+ i) x! r( R f6 P5 @6 Z5 Y
7.3 单节点故障恢复 172
: K& `, L3 d: o; M1 O0 e7.4 集群迁移 173
& V. e ^5 [1 `$ V2 x7.4.1 元数据重建 174$ V. q2 }4 Y4 o6 m F1 N) V
7.4.2 数据迁移和客户端连接的切换 183; O. v" {8 h( R& O& X
7.4.3 自动化迁移 1854 [5 F. x: |5 h5 L: Q5 Q
7.5 集群监控 189/ q+ c( I/ x8 J1 w3 K
7.5.1 通过HTTP API接口提供监控数据 189: @& }% V( `9 L% Q- y
7.5.2 通过客户端提供监控数据 1964 N# |- b0 w- l- V) f; S% R) q' O/ N
7.5.3 检测RabbitMQ服务是否健康 199
, e( |- M( R/ l5 F; z& |8 q7.5.4 元数据管理与监控 203 u& Q3 l. _1 i% T0 t4 Q
7.6 小结 205 z: }, V; L5 m$ B! r7 y `& ?
第8章 跨越集群的界限 206" T4 _* \: {( W$ F: ?5 T' ^
8.1 Federation 207* q( P) U3 X2 e" X& W$ f
8.1.1 联邦交换器 207
9 U% x7 |% B7 Z5 P7 a8.1.2 联邦队列 214" I$ J7 k- V+ H
8.1.3 Federation的使用 216( {, S! x* z4 c# D, z
8.2 Shovel 223
0 ]4 w" U1 a& N3 o1 g8.2.1 Shovel的原理 224
. o2 Q' ~) b, G3 R8.2.2 Shovel的使用 2271 A, N( c# x7 U
8.2.3 案例:消息堆积的治理 233) {+ R- C$ w4 [- v6 u, o
8.3 小结 235
+ i% C' S! g, b, ~% F第9章 RabbitMQ高阶 2372 S. i! A- u7 U1 }5 P, J
9.1 存储机制 238
1 ?& L4 Y ~: k2 h9.1.1 队列的结构 240( C6 S5 b7 {; u. i) h7 }7 ]
9.1.2 惰性队列 243
7 N$ Q1 K$ m" j U7 g3 l) S2 N9.2 内存及磁盘告警 2458 h9 k0 l& {9 N* l
9.2.1 内存告警 246
: L2 Q. `2 r1 C y9.2.2 磁盘告警 249
. N7 V* |# R# T+ ~- v& ]- l$ o3 u9.3 流控 250) K/ r9 V9 |& A
9.3.1 流控的原理 250' u) c m/ D- B- U
9.3.2 案例:打破队列的瓶颈 253
8 @! _: M" S. W V* Y5 `9.4 镜像队列 263
. T; i) I9 {! v( i6 Z" @: j9.5 小结 269
; P7 o6 K, a+ Q! \- u+ I7 z第10章 网络分区 270
7 N8 X1 U! d4 }1 Q3 Q* V# S10.1 网络分区的意义 271
" j; `6 b2 d) S$ c# h10.2 网络分区的判定 272
9 h& `" ?6 \2 d0 C0 t10.3 网络分区的模拟 275
' n; z* Y+ K5 o: M. o8 z10.4 网络分区的影响 279$ U2 I& f' J2 e# ?5 h( s
10.4.1 未配置镜像 2798 D- C7 }' a# O% w. A
10.4.2 已配置镜像 282
_; d. K" I X+ [/ D10.5 手动处理网络分区 284) k% d7 k$ x3 h3 V
10.6 自动处理网络分区 289
) C, v* N D8 \% h/ `10.6.1 pause-minority模式 289
8 i! N: z* j8 Q$ r1 O7 F( T10.6.2 pause-if-all-down模式 290% N! c; ~0 n" Y7 |2 k3 k1 {
10.6.3 autoheal模式 291
7 Z& X: u1 }; A/ Q10.6.4 挑选哪种模式 292
& U; o! x, w' b% S1 q0 `- T10.7 案例:多分区情形 293
5 N2 ]' G9 |+ Z) B4 S" @10.8 小结 296
; \# x: n0 N) v8 ]3 q( V) M第11章 RabbitMQ扩展 2971 \2 o4 v% @) G. Y% m# A
11.1 消息追踪 298
; b; A' w$ x- N6 X' I11.1.1 Firehose 298
2 k0 I! s) y) `9 r0 U! b11.1.2 rabbitmq_tracing插件 301: Z% X7 V- Y1 x6 D
11.1.3 案例:可靠性检测 305( x2 {/ n; j9 F! l
11.2 负载均衡 310& ^5 a# E, S7 d1 O: [" L
11.2.1 客户端内部实现负载均衡 3127 ~5 m) Y" t5 F
11.2.2 使用HAProxy实现负载均衡 3148 S- `7 [4 ^6 o! y3 t, U5 A: p& o* K
11.2.3 使用Keepalived实现高可靠负载均衡 318/ H6 ` P/ Z: o+ x
11.2.4 使用Keepalived LVS实现负载均衡 3257 o4 R I+ S% e/ R
11.3 小结 330 java8.com
$ o5 [# \$ o- b附录A 集群元数据信息示例 331* I1 l W; t+ y8 K9 {: C, F3 A0 A! L
附录B /api/nodes接口详细内容 3335 T, d0 n2 U- z
附录C 网络分区图谱 336
2 @3 b4 K# b3 e+ f" `