2016-12-31 117 views
0

我有一个服务将POST发送到'/'。该服务将消息推送到处理消息的RABBITMQ队列。我想在完成时返回指示,然后调用另一个处理另一个处理的函数。 场景:多步骤流程的最佳实践

(HTTP) - > server1->的RabbitMQ QUEUE-> RabbitMQ的消费者 - >回server1->通话功能的

服务器为节点JS

谢谢:)

回答

0

承诺链对您的情况可能有用。它将逐个执行所有的异步步骤,如果其中任何一个失败,错误将被捕获。

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

看看“流程管理器”模式用于消息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/