Заставить микросервис ждать, пока RabbitMQ не опубликует сообщение, используя Cote

#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 ожидать?