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,可以从源码中看到

EventTranslatorOneArg类使用

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


2:lamda

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

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








相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-18
  • 2021-06-04
  • 2021-12-04
  • 2021-11-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案