Genstage 和 polling 是推荐的模式吗?

Genstage and polling are a recommended pattern?

我正在 elixir 中开发我的第一个 medium/big 应用程序,我正在尝试熟悉 elixir 系统设计和架构中的常见模式。

此时我正在尝试实现一个输入队列(目前使用 erlang :queue 实现),通过 API 公开,我想让该队列中的消费者执行一些处理并存储数据.

我已经使用代理创建了队列,并且我已经实现了一个 genStage 来查询队列中的元素和一个 genstage 消费者来执行我需要的所有处理。总结起来是这样的

队列代理 ------> GenStage 生产者 --------> GenStage 消费者 -----> 数据库

我的问题如下:

  1. 这个模式对 Elixir 有效吗?
  2. GenStage 生产者在队列上执行的轮询是否有效,每次消费者请求新元素时都会询问?
  3. 此模式是否有任何性能影响,特别是队列代理是否有任何可能的阻塞影响?

经过一些评论和阅读文档后,我意识到 GenStage 是基于 GenServer 并且我有可能从 GenStage.[=18= 外部管理内部状态]

在此之后我重构了代码,现在我有 :queue 作为 GenStage 状态的一部分,所以我不需要轮询 GenStage 之外的任何队列和我还可以使用 handle_cast 方法将元素添加到队列中。

现在我的队列作为 GenStage 生产者工作,并且我已经能够作为消费者连接我的数据库服务