EventTranslatorOneArg类使用

EventTranslatorOneArg是一个泛型类,比如EventTranslatorOneArg,被用在disruptor发布事件event的时候作为参数传入。disruptor发布event后,会执行这个类的translateTo方法,据我目前的了解其作用是:将SourceEventModel转换成TargetEventModel,然后disruptor中的handler链就消费TargetEventModel对象。

常见的写法有两种

1:非lamda

先写一个类SourceModelConvertToTargetUtil实现EventTranslatorOneArg

,然后实现translateTo方法,里面主要的逻辑就是将sourceEventModel转换成targetEventModel

然后就是disruptor调用publisEvent方法:

Disruptor.publishEvent(sourceModelConvertToTargetUtil,event);

这里需要注意一点就是第二个参数event,这个参数其实就是sourceEventModel,可以从源码中看到

EventTranslatorOneArg类使用_第1张图片

其中A arg0就是sourceEventModel对象,而第一个参数sourceModelConvertToTargetUtil类其实就理解成一个转换类


2:lamda

sourceDisruptor.publishEvent((event, seq, arg) -> {event.setMessage(message);event.setBondType(BondType.BBO);}, message);

很简单,一句代码就搞定。其实对我言两种方式都是可以的,我选择方式是根据如果转换逻辑复杂那么就选第一个方式,如果转换很简单,比如就是一句赋值语句,那么lamda会很方便,代码的可读性非常好








你可能感兴趣的:(disruptor)