簡體   English   中英

Play Framework Scala線程親和力

[英]Play Framework Scala thread affinity

我們在Scala中使用Play Framework提供HTTP層。 我們的一個API是以下形式:

POST          /customer/:id

請求由我們的UI團隊發送,該團隊通過React Framework調用這些API。

問題在於,有時,請求是分批發出的,先后依次為同一個客戶ID發出。 發生這種情況時,不同的線程會處理這些請求,因此我們的持久層(MySQL)會因為處理這些請求的時間戳不同而達到不一致狀態。

是否可以在Play Scala中配置某種線程關聯? 我的意思是,我可以配置Play以確保特定客戶ID的請求在應用程序的整個生命周期中由同一個線程處理嗎?

批量

將多個API調用放入單個HTTP請求中。

批處理請求是一個HTTP請求中的一組命令,如https://developers.facebook.com/docs/graph-api/making-multiple-requests/

你把它形容為

問題在於,有時,請求是分批發出的,先后依次為同一個客戶ID發出。 發生這種情況時,不同的線程會處理這些請求,因此我們的持久層(MySQL)會因為處理這些請求的時間戳不同而達到不一致狀態。

這是一組並發請求 Play框架通常用作無狀態服務器。 我假設你也把它組織成無國籍的。 沒有什么可以將一個請求綁定到另一個請求,您無法控制訂單。 好吧,如果你創建了一個特殊的協議,比如“打開批量請求”,請求#1,#2,......“關閉批量請求”。 您需要檢查所有請求是否正確。 你還需要運行一些有狀態的線程和一些隊列...思考akka可以幫助解決這個問題,但我很確定你不會這樣做。

這個問題不是依賴的“游戲框架”。 您將在任何服務器中重現它。 例如,一般情況: 是否可以通過HTTP接收無序響應?

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

1.在一個請求中“批處理”命令

您需要更改客戶端,以便將“批處理”請求合並為一個。 您還需要更改服務器,以便一個接一個地處理批處理中的所有命令。

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

2.“管道”請求

您需要更改客戶端,以便在收到上一個請求后發送下一個請求。

示例: 是否可以通過HTTP接收無序響應?

解決方案是管道Ajax請求,並以串行方式傳輸它們。 ...... 只有在前一個請求成功返回后才發送下一個請求。“

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM