在我使用 Akka 掌握 Actor 模型的过程中,出现了很多问题。这是另一张。假设我们有一个 Actor,由于某些业务逻辑或可用资源,它必须在给定时间内停止处理消息。可能发生这种情况的情况可能是:
节流。可能有一个发送电子邮件的 Actor,但被限制为每秒只能发送一封电子邮件。
Actor 可能会采用某种只能同时处理 x 消息的系统。这可能是一个 AsyncHttpClient,它有一个固定的线程池,我不想超载它。
处理消息所需的某些外部资源不可用(阅读:外部 REST-API)
我的大脑很可能还没有为演员做好准备,我只需要一个提示,如何以演员的方式解决这些问题。
一般回答
参与者总是尽可能快地处理消息,处理意味着将消息从邮箱中取出并将其传递到参与者的行为中。因此,行为就是你的答案所在:在需要非名义行动的时期将其更改为更合适的东西。
节流
如果一个组件处理消息的速度低于消息生成的速度,它最终将不得不丢弃消息。要么使用有界邮箱,要么在前面安排一名经理,跟踪员工的进度,并在压力期间进入“回复负面结果”模式。
当参与者想要限制自己的输出速率时,请使用context.system.scheduler
.
这应该回答你的前两点。
Recovery
在所需资源不可用期间,您有两种选择,具体取决于要求:在内部对消息进行排队,或进入“无序”回复模式。您还可以混合,即在一定的时间和空间限制下排队,并在达到限制时失败。
进一步的考虑
始终保持参与者处理的工作单元很小,以便参与者可以在其延迟要求内做出反应。后者可以非常宽松(不间断地运行数小时)或非常严格(必须以 kHz 速率处理消息)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)