#node.js #promise #async-await #microservices #cote
#node.js #обещание #async-ожидание #микросервисы #cote
Вопрос:
У меня есть микросервис API-ШЛЮЗА, который управляет всем показом, и одна из служб называется QueueService.
Вот API-шлюз
const express = require('express')
const bodyParser = require('body-parser')
const cote = require('cote')
const cors = require('cors');
const app = express()
app.use(bodyParser.json())
app.use(cors());
app.post('/queue-msg', async (req, res, next) => {
let { from, to } = req.body;
const payload = {
from, to
}
const queue = await queueRequester.send({ type: 'create-queue-message', payload })
res.status(200).send({ "message-sent": true, queue });
});
Это служба очередей thq :
const cote = require('cote')
const queueProducer = require('./utils/queueProducer');
const queueName = 'pathfinderqueue';
const queueResponder = new cote.Responder({ name: 'queue responder', key: 'deliveries' })
queueResponder.on('*', req => req.type amp;amp; console.log(req))
const deliveries = []
let idCounter = 0
queueResponder.on('create-queue-message', req => {
async function makeRequest() {
console.log('Got a message from API-GATEWAY!');
let { payload } = req; // get From amp; To
queueProducer.publishToQueue(queueName, payload); // Publish to Rabbit
const queue = { id: idCounter , status: 'pending' } // Set the ID
deliveries.push(queue)
return Promise.resolve(queue)
}
const response = makeRequest();
return response;
})
Однако каждый раз, когда API-шлюз публикует сообщение от клиента React в службу очередей, служба очередей не ожидает в on
событии и отправляет обратно
"message-sent": true
для клиента.
Как мы можем заставить QueueService ожидать?