Node.js 为NodeJS中的并发请求生成随机请求ID

Node.js 为NodeJS中的并发请求生成随机请求ID,node.js,express,logging,uuid,access-log,Node.js,Express,Logging,Uuid,Access Log,我正在尝试为我的express服务器生成随机requestId。我一直在使用uuidV1() 节点uuid模块。对于普通的请求,它工作得很好,但是当我尝试使用并发请求进行加载测试时。生成的值是相同的 const uuidv1 = require("uuid/v1"); const reqId = uuidv1() 而不是uuid模块。您可以使用下面的模块 有了它,您可以根据mac地址、进程id和时间戳的组合生成唯一id,您应该在中间件中生成它,并将其附加到请求对象。其次,uuid

我正在尝试为我的express服务器生成随机requestId。我一直在使用uuidV1() 节点uuid模块。对于普通的请求,它工作得很好,但是当我尝试使用并发请求进行加载测试时。生成的值是相同的

const uuidv1 = require("uuid/v1");    
const reqId  = uuidv1() 

而不是uuid模块。您可以使用下面的模块


有了它,您可以根据mac地址、进程id和时间戳的组合生成唯一id,您应该在中间件中生成它,并将其附加到请求对象。其次,uuidv1根据时间戳生成ID(检查wiki),使用v4代替。 下面是一个简单的例子

const express = require('express');
const app = express();
const uuidv4 = require("uuid/v4");    

app.use((req, res, next) => {
    req.reqId = uuidv4();
    next();
});

app.get('/', function (req, res) {  
  res.send(`Hello World! with reqId: ${req.reqId}`);
});

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
});

“快速请求id”npm模块应该为您完成这项工作


这个问题仍然存在,因为>=5个并发请求在使用loadtest npm模块时,如果将并发性设置为大于1,它将生成相同的uuid。示例:loadtest-n10-c5,以这种方式生成的reqId将复制一些您如何使用它的片段(您的web服务器)。为了回答上述示例,我将使用
ab-n20-c15对其进行负载测试http://localhost:3000/
。它正在发送15个并发请求,我在reqId中没有看到重复。如果您使用的是mac ab(apache基准),则默认情况下应安装
const express = require('express');
const app = express();
const addRequestId = require('express-request-id')();  

app.use(addRequestId);

app.get('/', function (req, res) {  
  res.send(`Request Id : ${req.id}`);
});

app.listen(3000, function () {
  console.log('listening on port 3000')
});