【发布时间】:2015-04-10 09:00:09
【问题描述】:
我的应用程序基于Nodejs + Mongodb + amqp。核心模块接收来自amqp的消息,然后将其包装到相应的消息事务中。在消息事务中,将消息信息保存到mongodb等一些逻辑中。
function messageReceiverCallback(msg) {
try {
messageHandler(decode(msg));
} catch (ex) {
}
}
function messageHandler(msg) {
function defaultTransaction() {
}
var dispatch = {
'default': defaultTransaction
}
dispatch[MSG.TYPE1] = Msg1Transaction;
// other message transaction here
return (dispatch[msg.type] || dispatch['default'])(msg);
}
function Msg1Transaction(msg) {
// some mongodb operation here...
}
但是,当amqp的队列中存在多条消息字段值不同的同类型消息时,则messageReceiverCallback会被调用,Msg1Transaction也会被调用多次。结果,mongodb 中保存的数据将不正确,因为我忽略了 mongodb 上的 异步 操作。 在这种情况下我该如何处理?
我有一个想法,可能会添加一个用Promise 包裹的新事务队列。所以事务可以异步处理。但是我不怎么执行呢?有人可以帮助我或其他更好的解决方案吗?
【问题讨论】:
标签: javascript node.js mongodb asynchronous promise