Play Framework Scala线程亲和力

问题描述 投票:2回答:1

我们在Scala中使用Play Framework提供HTTP层。我们的一个API是以下形式:

POST          /customer/:id

请求由我们的UI团队发送,该团队通过React Framework调用这些API。

问题在于,有时,请求是分批发出的,先后依次为同一个客户ID发出。发生这种情况时,不同的线程会处理这些请求,因此我们的持久层(MySQL)会因为处理这些请求的时间戳不同而达到不一致状态。

是否可以在Play Scala中配置某种线程关联?我的意思是,我可以配置Play以确保特定客户ID的请求在应用程序的整个生命周期中由同一个线程处理吗?

multithreading scala http playframework playframework-2.0
1个回答
1
投票

批量是

将多个API调用放入单个HTTP请求中。

批处理请求是一个HTTP请求中的一组命令,就像这里的https://developers.facebook.com/docs/graph-api/making-multiple-requests/一样

你把它形容为

问题在于,有时,请求是分批发出的,先后依次为同一个客户ID发出。发生这种情况时,不同的线程会处理这些请求,因此我们的持久层(MySQL)会因为处理这些请求的时间戳不同而达到不一致状态。

这是一组并发请求。 Play框架通常用作无状态服务器。我假设你也把它组织成无国籍的。没有什么可以将一个请求绑定到另一个请求,您无法控制订单。好吧,如果你创建了一个特殊的协议,比如“打开批量请求”,请求#1,#2,......“关闭批量请求”。您需要检查所有请求是否正确。你还需要运行一些有状态的线程和一些队列...思考akka可以帮助解决这个问题,但我很确定你不会这样做。

这个问题不是依赖的“游戏框架”。您将在任何服务器中重现它。例如,一般情况:Is it possible to receive out-of-order responses with HTTP?

你可以采取任何一种方式:

1.在一个请求中“批处理”命令

您需要更改客户端,以便将“批处理”请求合并为一个。您还需要更改服务器,以便一个接一个地处理批处理中的所有命令。

请求示例:https://developers.facebook.com/docs/graph-api/making-multiple-requests/

2.“管道”请求

您需要更改客户端,以便在收到上一个请求后发送下一个请求。

示例:Is it possible to receive out-of-order responses with HTTP?

解决方案是管道Ajax请求,并以串行方式传输它们。 ......只有在前一个请求成功返回后才发送下一个请求。“

© www.soinside.com 2019 - 2024. All rights reserved.