有没有人有注册表.Dispatch只是随机停止派遣事件



我有一个应用程序,该应用程序可以从WebSocket Feed中消费事件。它调用Registry.dispatch/3将消息发送到订阅的Genservers,然后将其打印到控制台上。管道衬砌由Genstage处理。生产者坐在插座上,并通过接收呼叫生成事件。然后,如果以特定的方式影响州,则消费者管理州并将事件派遣到注册表中的过程。订阅注册表的过程将在通过handle_info/2收到消息时记录事件。

运行该应用程序约20分钟后,事件停止登录到控制台,而不会发生任何事情。在控制台中,我查看了注册表过程,并看到该过程未订阅,因为没有该钥匙的注册表,但没有丢弃任何错误,一切都默默地发生了。我还在进行活动,因此Genstage消费者仍在消费事件,并且在注册表派遣点破裂。我可以验证WebSocket连接没有关闭,并且仍在阅读中。

这是一个可复制的问题。每次运行时大约相同的延迟后,事件停止打印,这令人困惑。这会让我认为某个地方有某种泄漏,但是观察者上的负载图似乎表明一切都很好。

免责声明:我是Elixir的总初学者,我可能会缺少一些明显而琐碎的东西,但在我的知识范围之外。

管道由GenStage处理。

这主要看起来像是GenStage处理需求中的僵局。消费者发送需求后,生产者返回了handle_demand的空列表,消费者 do nop of consemer do nop of to nob stop

这是故意完成的,是生产者的职责

收集要求的需求并之后提供服务

最新更新