多步骤流程的最佳实践

时间:2016-12-31 16:26:51

标签: node.js queue rabbitmq

我有一个服务,可以发送到' /'。此服务将消息推送到RABBITMQ队列,该队列处理消息。我想在完成时返回指示,然后调用另一个执行另一个处理的函数。 场景:

(http) - > server1-> RABBITMQ QUEUE-> RABBITMQ消费者 - >返回服务器1 - >呼叫功能A

服务器是NODE JS

谢谢:)

2 个答案:

答案 0 :(得分: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
})

答案 1 :(得分:0)

查看"流程管理器"消息模式http://www.enterpriseintegrationpatterns.com/patterns/messaging/ProcessManager.html

以及" saga" (https://docs.particular.net/nservicebus/sagas/https://lostechies.com/jimmybogard/2013/05/14/saga-patterns-wrap-up/)或"工作流程管理员"模式,基本上是相同的,但名称不同。

它的要点是,你有一个核心代码,可以理解整个流程的流程。它处理在正确的时间发出正确的消息,接收响应,处理该响应以找出接下来发生的事情,并进行下一次调用,以便该过程的下一步发生。

我有一篇博文,介绍了这个核心思想,从Node中的简单JS对象转移到带有这些概念的RabbitMQ https://derickbailey.com/2015/08/10/managing-workflow-in-long-running-javascript-processes/