我有一个服务将POST发送到'/'。该服务将消息推送到处理消息的RABBITMQ队列。我想在完成时返回指示,然后调用另一个处理另一个处理的函数。 场景:多步骤流程的最佳实践
(HTTP) - > server1->的RabbitMQ QUEUE-> RabbitMQ的消费者 - >回server1->通话功能的
服务器为节点JS
谢谢:)
我有一个服务将POST发送到'/'。该服务将消息推送到处理消息的RABBITMQ队列。我想在完成时返回指示,然后调用另一个处理另一个处理的函数。 场景:多步骤流程的最佳实践
(HTTP) - > server1->的RabbitMQ QUEUE-> RabbitMQ的消费者 - >回server1->通话功能的
服务器为节点JS
谢谢:)
承诺链对您的情况可能有用。它将逐个执行所有的异步步骤,如果其中任何一个失败,错误将被捕获。
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
})
看看“流程管理器”模式用于消息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/