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
要等A1Handler
和A2Handler
全部执行完,它才会执行。
++++++++++
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
总结
所有的模式都可以根据并行和串行来衍生出各种模式,玩法多种多样。