Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Akka Persistence-AtLeastOnceDelivery:如何在不耗尽内存的情况下获取无限数量的未确认消息_Akka_Akka Persistence - Fatal编程技术网

Akka Persistence-AtLeastOnceDelivery:如何在不耗尽内存的情况下获取无限数量的未确认消息

Akka Persistence-AtLeastOnceDelivery:如何在不耗尽内存的情况下获取无限数量的未确认消息,akka,akka-persistence,Akka,Akka Persistence,我们正在使用至少一个OnceDelivery持久参与者。我们收到大量未经确认的消息,如果这个数字太大,就会导致OutOfMemoryError 是否有一种方法可以配置AtLeastOnceDelivery actor将未确认的消息保留在磁盘上,而不是将它们全部保留在内存中,直到确认 或者更好的是,是否有一种替代AtLeastOnceDelivery的方法可以绕过此限制?无法调整AtLeastOnceDeliverytrait,使其仅保留在磁盘上,而不将信息保留在内存中AtLeastOnceDel

我们正在使用至少一个OnceDelivery持久参与者。我们收到大量未经确认的消息,如果这个数字太大,就会导致OutOfMemoryError

是否有一种方法可以配置AtLeastOnceDelivery actor将未确认的消息保留在磁盘上,而不是将它们全部保留在内存中,直到确认


或者更好的是,是否有一种替代AtLeastOnceDelivery的方法可以绕过此限制?

无法调整
AtLeastOnceDelivery
trait,使其仅保留在磁盘上,而不将信息保留在内存中
AtLeastOnceDelivery
遵循与持久参与者类似的语义:可交付的消息被备份到Akka持久化后端,并保存在内存中以便快速访问。内存中的存储是

如果您在限制内存使用方面有困难,也许您应该调查发生这种情况的原因以及如何解决它。在我看来,不断耗尽内存的参与者没有足够快地获得对其消息传递的响应,因此可交付的工作不断堆积

有几个技巧可以尝试加快消息处理速度。您可以尝试优化消息处理中的各个组件以加快处理速度,也可以尝试使用以下技术并行处理消息:。然而,有时这些技巧可能不足以使处理速度足够快,这是当您需要考虑如何控制消息被带到参与者进行处理时。
你可以代替演员接受来自它的所有信息。有很多方法可以实现此模式,但它们有一个共同的前提:不是直接将所有消息转储到参与者上,而是将消息存储到数据库(或可以处理大量数据的东西),然后让工作参与者尽可能快地拉取和处理存储的消息。我不认为有很多现成的模式解决方案,因此您可能需要自己做一些工作来实现解决方案。

没有办法调整
至少OnceDelivery
特性,使其仅在磁盘上持久化,而不将信息保留在内存中
AtLeastOnceDelivery
遵循与持久参与者类似的语义:可交付的消息被备份到Akka持久化后端,并保存在内存中以便快速访问。内存中的存储是

如果您在限制内存使用方面有困难,也许您应该调查发生这种情况的原因以及如何解决它。在我看来,不断耗尽内存的参与者没有足够快地获得对其消息传递的响应,因此可交付的工作不断堆积

有几个技巧可以尝试加快消息处理速度。您可以尝试优化消息处理中的各个组件以加快处理速度,也可以尝试使用以下技术并行处理消息:。然而,有时这些技巧可能不足以使处理速度足够快,这是当您需要考虑如何控制消息被带到参与者进行处理时。
你可以代替演员接受来自它的所有信息。有很多方法可以实现此模式,但它们有一个共同的前提:不是直接将所有消息转储到参与者上,而是将消息存储到数据库(或可以处理大量数据的东西),然后让工作参与者尽可能快地拉取和处理存储的消息。我认为该模式没有很多现成的解决方案,因此您可能需要自己做一些工作来实现该解决方案。

只想补充一点,我们已经使用了最大未确认消息数设置。虽然减小此值可以防止OutOfMemoryError,但它确实会导致丢弃后续消息。我们希望有一个解决方案,其中未确认的消息不保留在内存中,而是不断刷新到文件中,而不会丢失任何消息。只想补充一点,我们已经使用了最大未确认消息数设置。虽然减小此值可以防止OutOfMemoryError,但它确实会导致丢弃后续消息。我们希望有一个解决方案,使未经确认的消息不保存在内存中,而是不断地刷新到文件中,而不会丢失任何消息。@Jaako感谢您的回答。你所提出的许多观点都是正确的。看来我们可能必须实施一种机制,要么拉工作,要么以某种方式背压。@Jaako谢谢你的回答。你所提出的许多观点都是正确的。看来我们可能要实施一种机制,要么拉工作,要么以某种方式背压。