我正在使用 2 个快速微服务,第一个(产品)负责产品队列,第二个(出价)负责出价队列。通道和连接是在服务器自行启动时建立的。在产品服务数据的一个特定端点中,数据首先发送到出价队列,在出价服务中对其进行处理,并且在数据库请求之后,将其发送回产品队列,该队列在第一个端点本身内使用。
问题是第一次 api 调用时功能运行良好。但在随后的调用中,我收到 - “nodejs 在发送到客户端后无法设置标头”。下面附上 api 调用的正文。
channel.sendToQueue(
"BID",
Buffer.from(
JSON.stringify({
payload: req.body
})
)
);
return new Promise((resolve, reject) => {
channel.assertQueue("PRODUCT");
channel.consume("PRODUCT", (data) => {
let { payload } = JSON.parse(data.content);
console.log('Consuming from Second service', payload)
resolve('payload')
});
}).then(resp => {
return res.json(resp);
}).catch(err => {
console.log('errrrr', err)
})
迟到总比不到好。我有同样的问题。我通过在每个 api 调用中创建和关闭通道解决了这个问题。 像这样:
channel = await connection.createChannel();
await channel.assertQueue("channel_name");
resp.send(await getResponse()); //get response from RabbitMQ queue
channel.close();