描述:我有一个高负载的web应用程序 Node.js
在 Express
框架。
在特定的路由上,我想使请求排队。
我需要的是:我需要一个接一个地处理请求。如果同时有5个请求,它们将在队列中处理:1个已处理,2个已处理,3个已处理,等等。。。
我需要这个队列,因为如果同时有2个请求,则一个请求失败,因为“serializable”事务选项只允许1个活动数据库事务。我需要在队列中存储请求 Redis
,因为我正在用运行多个重复的应用程序 pm2
平衡负载。
这是我当前的代码,没有任何队列保护:
import { Router, Request, Response } from 'express';
import { getManager } from 'typeorm';
const router = Router();
router.post('/apply', async (request: Request, response: Response) => {
await getManager().transaction('SERIALIZABLE', async (txManager) => {
/* Many selects, inserts here */
});
});
现在我有这样一个行为:如果有5个用户同时向 /apply
路由,4个用户将失败,并显示消息 could not serialize access due to read/write dependencies among transactions
,只处理一个请求。
我需要的行为:如果有5个用户在同一时间发出post请求 /apply
路线,每一个请求都会一一处理。因此,路由中的代码将在处理上一个请求之后执行。
暂无答案!
目前还没有任何答案,快来回答吧!