RabbitMQ sendtoQueue 并在同一个 REST API 调用中消费

问题描述 投票:0回答:1

我正在使用 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)
})
node.js express rabbitmq amqp
1个回答
0
投票

迟到总比不到好。我有同样的问题。我通过在每个 api 调用中创建和关闭通道解决了这个问题。 像这样:

channel = await connection.createChannel();
await channel.assertQueue("channel_name");
resp.send(await getResponse()); //get response from RabbitMQ queue
channel.close();
© www.soinside.com 2019 - 2024. All rights reserved.