在某项目里,有个 actor 需要做一些持久化的操作,这些操作耗时比较久,理应使用异步的代码来写,但是需求又强调每次只能做一个持久化操作,后来的请求应该等待.一个显然的做法是阻塞式的写,这样就能比较简单的实现顺序花操作. 代码写完以后,我觉得在 actor 中 block 不够完美,就想其他的解决方案.实际上,借助 akka actor 的一些函数,可以实现在不阻塞的情况下实现顺序执行请求的功能的.这种办法的核心是使用 become, unbecome 函数:actor 设置两种状态 free…