EventTranslatorOneArg是一个泛型类,比如EventTranslatorOneArg<TargetEventModel,SourceEventModel>,被用在disruptor发布事件event的时候作为参数传入。disruptor发布event后,会执行这个类的translateTo方法,据我目前的了解其作用是:将SourceEventModel转换成TargetEventModel,然后disruptor中的handler链就消费TargetEventModel对象。
常见的写法有两种
1:非lamda
先写一个类SourceModelConvertToTargetUtil实现EventTranslatorOneArg<TargetEventModel,SourceEventModel>
,然后实现translateTo方法,里面主要的逻辑就是将sourceEventModel转换成targetEventModel
然后就是disruptor调用publisEvent方法:
Disruptor.publishEvent(sourceModelConvertToTargetUtil,event);
这里需要注意一点就是第二个参数event,这个参数其实就是sourceEventModel,可以从源码中看到
其中A arg0就是sourceEventModel对象,而第一个参数sourceModelConvertToTargetUtil类其实就理解成一个转换类
2:lamda
sourceDisruptor.publishEvent((event, seq, arg) -> {event.setMessage(message);event.setBondType(BondType.BBO);}, message);
很简单,一句代码就搞定。其实对我言两种方式都是可以的,我选择方式是根据如果转换逻辑复杂那么就选第一个方式,如果转换很简单,比如就是一句赋值语句,那么lamda会很方便,代码的可读性非常好