node.js集群环境请求队列与redis

h5qlskok  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(232)

描述:我有一个高负载的web应用程序 Node.jsExpress 框架。
在特定的路由上,我想使请求排队。
我需要的是:我需要一个接一个地处理请求。如果同时有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 路线,每一个请求都会一一处理。因此,路由中的代码将在处理上一个请求之后执行。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题