ask模式和tell模式对比

  1. ask模式
  • 返回Future类型的结果,需要传递超时参数.
  • 看上去简单,其实有额外的性能开销: 首先ask会导致akka在/tmp路径下新建一个临时的actor,然后该临时actor会等待从接收ask消息的actor的响应.接收到响应后由该临时的actor将其封装为Future然后返回.另外Future也有额外的性能开销,创建Future虽然开销不大,如果是高频的执行ask操作还是需要考虑进去的.
  • ask设置超时参数,如果设置的不当容易引起超时异常,比如过大的话将会影响系统的性能,因为会引起长时间的等待问题,过小的话将会造成超时异常问题.当面临嵌套使用ask时,这些问题将尤为突出.
  • 使用ask时候当代码中发生错误抛出异常的时候一定要手动返回失败消息并记录失败原因.因为如果一个actor抛出异常时,它本身是不会返回消息的,如果不返回消息,那临时actor将会一直等待到超时,这个时候将会导致超时错误,此时将无法区分超时错误的原因.

你可能感兴趣的:(ask模式和tell模式对比)