2016-12-31 8 views
0

У меня есть служба, которая получает POST на '/'. Эта служба выводит сообщение в очередь RABBITMQ, которая обрабатывает сообщение. Я хочу вернуться к завершению, а затем вызвать другую функцию, которая выполняет другую обработку. Сценарий:Лучшая практика многоступенчатого потока

(HTTP) -> server1-> RabbitMQ QUEUE-> RabbitMQ потребительскую> вернуться к server1-> функции индивидуального вызова

Сервер является УЗЕЛ JS

Спасибо :)

ответ

0

Цепочка обещаний может быть полезна в вашем случае. Он выполнит все шаги async один за другим, и, если какой-либо из них не удастся, будет обнаружена ошибка.

const doSomethingStepByStep =() => { 
    return Promise.resolve() 
.then(() => { 
    // call server, or whatever - here just an example that promise is resolved 
    return Promise.resolve() 
    }) 
.then(() => { 
    // etc, call another server 
    }) 
.catch(ex => { 
    // something went wrong in either in the steps above 
    }) 
} 

// use it 
doSomethingStepByStep() 
    .then((res) => { 
// do something with the result 
}) 
0

взгляд на модель «Process Manager» для обмена сообщениями http://www.enterpriseintegrationpatterns.com/patterns/messaging/ProcessManager.html

, а также «саге» (https://docs.particular.net/nservicebus/sagas/ и https://lostechies.com/jimmybogard/2013/05/14/saga-patterns-wrap-up/) или «менеджер рабочего процесса» модели, которые в основном то же самое, но с разными имена.

Суть в том, что у вас есть центральный кусок кода, который понимает общий поток процесса. он обрабатывает отправку правильного сообщения в нужное время, получает ответ, обрабатывает этот ответ, чтобы выяснить, что будет дальше, и сделать следующий вызов, чтобы следующий шаг в этом процессе мог произойти.

У меня есть сообщение в блоге, который охватывает эту основную идею, переходя от простых JS объектов в узле, к RabbitMQ с этими понятиями https://derickbailey.com/2015/08/10/managing-workflow-in-long-running-javascript-processes/