Disruptor-消费模式简介(单个实例)

并行模式

并行模式下两个Handler同时执行,互不影响

disruptor.handleEventsWith(new A1Handler(),new B1Handler());

图片

结果示例

++++++++++
1605084168915+B1Handler:5
1605084168915+A1Handler:1
++++++++++
1605084169915+B1Handler:6
1605084169915+A1Handler:2

串行模式

串行模式下,Handler执行必须是从前往后,按顺序执行。

disruptor.handleEventsWith(new A1Handler()).then(new B1Handler());
// or
disruptor.handleEventsWith(new B1Handler()).then(new A1Handler());

图片

结果示例

结果和handler放置的顺序有关,后面的handler要等前面的执行完才会执行

++++++++++
1605084411462+A1Handler:1
1605084411467+B1Handler:5
++++++++++
1605084412463+A1Handler:2
1605084412463+B1Handler:6

// or

++++++++++
1605084638285+B1Handler:5
1605084638289+A1Handler:1
++++++++++
1605084639286+B1Handler:6
1605084639286+A1Handler:2

菱形模式

菱形模式其实就是并行和串行的结合体,先并行执行,再串行执行

disruptor.handleEventsWith(new A1Handler(), new A2Handler()).then(new B1Handler());

图片

结果示例

B1Handler要等A1HandlerA2Handler全部执行完,它才会执行。

++++++++++
1605085280283+A1Handler:1
1605085280283+A2Handler:3
1605085280287+B1Handler:5
++++++++++
1605085281283+A1Handler:2
1605085281283+A2Handler:4
1605085281283+B1Handler:6

链式模式

链式模式也是并行和串行的结合,并行模式执行串行模式

disruptor.handleEventsWith(new A1Handler()).then(new A2Handler());
disruptor.handleEventsWith(new B1Handler()).then(new B2Handler());

图片

结果示例

++++++++++
1605085843558+B1Handler:5
1605085843558+A1Handler:1
1605085843563+A2Handler:3
1605085843563+B2Handler:7
++++++++++
1605085844558+B1Handler:6
1605085844558+A1Handler:2
1605085844558+B2Handler:8
1605085844559+A2Handler:4

总结

所有的模式都可以根据并行串行来衍生出各种模式,玩法多种多样。