在我使用Akka掌握Actor模型的过程中,会弹出许多问题.这是另一个.假设我们有一个Actor,由于某些业务逻辑或可用资源,它必须在给定时间内停止处理消息.可能发生这种情况的情况可能是:
节流.可能有一个Actor发送电子邮件但被限制为每秒只发送一封电子邮件.
Actor可能会使用一些只能同时处理x-messages的系统.这可能是一个AsyncHttpClient,它有一个固定的线程池,我不想重载它.
处理消息所需的某些外部资源不可用(读取:外部REST-API)
我的大脑很可能尚未准备演员,我只需要提示如何以演员的方式解决这些问题.
Actor总是尽可能快地处理消息,其中处理意味着将它们从邮箱中取出并将它们传递给actor的行为.因此,行为就是您的答案所在的地方:在需要非名义行为的时间段内将其更改为更合适的地方.
如果一个组件以低于生成的速率处理消息,则最终必须丢弃消息.要么使用有界邮箱,要么将经理放在前面,跟踪工人的进度,并在压力期间进入"回复否定结果"模式.
当演员想要限制自己的输出率时,请使用context.system.scheduler.
这应该回答你的前两点.
在所需资源不可用的期间,根据要求,您有两个选项:在内部排队消息,或进入"无序"应答模式.您还可以混合,即排队某些时间和空间限制,并在达到限制时失败.
始终保持演员处理的工作单元非常小,以至于演员可以在其延迟要求内作出反应.后者可以非常放松(不间断地运行几个小时)或非常严格(必须以kHz速率处理消息).