【问题标题】:Akka: Is this the correct way to build REST web service with Actors?Akka:这是用 Actors 构建 REST Web 服务的正确方法吗?
【发布时间】:2017-01-29 17:58:50
【问题描述】:

我在做什么:

我正在使用 play 2.5.7 (java) 并尝试构建 REST 应用程序。 当我在控制器上接到电话时,我问第一个参与者,这个参与者只能解决部分问题(获取附加数据),需要将其转发给另一个参与者,该参与者使用请求数据和附加数据来更新更多数据,向另一个参与者发送一个异步无效调用(告诉)并响应控制器。所有这些 (4) 个actor 都使用 Guice 在其他actor 或控制器中@Injected。

调用流程:

控制器 --(Patterns.ask)--> actor1 --(actor.forward)--> actor2 --(actor.forward)--> actor3 (-tell-> actor4) 和 --(sender( ).tell)--> 控制器。

问题:

这适用于前 4 次通话。然后在 actor1.forward 上,每次连续请求都会失败; Patterns.ask 超时。 System.out 在 actor1.forward 工作之前上线,但不是实际的转发。无论超时值如何(甚至尝试了 20 秒)。请求中未进行任何更改;我每次都按邮递员的发送按钮。

我有两个问题:

  1. 为什么是 4?为什么在第四次请求后失败?它是一些配置吗?我应该在配置中寻找什么?
  2. 我对演员所做的事情是构建 REST Web 服务的正确方法吗?

更新:我发现了问题;这是由于通过池消耗了 Redis 连接并且从未释放它们而引起的。但是我的第二个问题仍然存在,我在这里做的事情是否可取?

【问题讨论】:

    标签: java rest playframework akka


    【解决方案1】:

    当然,这可能是一个合理的设计。但我会考虑使用Future 返回方法是否更易于维护,除非您的工作流程需要多个移动部件或内部状态之间的一些复杂协议。如果您的处理不能很好地映射到异步方法调用,也可能值得考虑 Akka Streams

    基本上,演员是一个相当低级的工具。如果您需要它们,我会尽量减少直接使用它们的应用程序的表面积。在可能的情况下,更高级别的抽象会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2010-09-16
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多