【问题标题】:How to share result between multiple concurrent requests in Elixir/Phoenix?如何在 Elixir/Phoenix 中的多个并发请求之间共享结果?
【发布时间】:2020-01-09 22:32:08
【问题描述】:

我有一个使用 Phoenix 用 Elixir 编写的 API 服务。它具有以下端点:

  1. 接收字符串参数。
  2. 检查结果是否已经存在于缓存中(数据库或文件,参数为缓存键):
    • 如果是,立即返回结果。
    • 如果否,则向第三方服务执行外部请求,处理请求响应,缓存结果然后返回。

它工作正常。但是现在我想在并发请求之间共享结果:如果有一个请求A正在等待第三方服务响应或处理结果,其他具有相同参数的请求不应该做同样的工作,他们应该等待来自请求A的结果.

如果有人能帮我找到解决方案,我将不胜感激。

【问题讨论】:

    标签: elixir phoenix


    【解决方案1】:

    只需将调用 3rd 方服务的函数封装到 GenServer.handle_call/3 中即可。

    这个实现GenServer行为的进程将免费维护队列; OTP 可以。

    后续的请求会被放入进程邮箱,直到这个完成,所以后面的所有请求都会命中缓存。

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 2017-12-16
      • 1970-01-01
      • 2019-04-17
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多