【发布时间】:2020-08-31 10:34:06
【问题描述】:
我有一个 node.js 函数需要为我的应用程序上的每个订单执行。在此函数中,我的应用程序从 oracle 数据库中获取订单号,处理订单,然后将 + 1 添加到数据库上的该数字(需要是函数的最后一件事,因为订单可能会失败,因此不会使用该数字)。
如果在时间 T 收到的所有订单同时(异步)处理,那么相同的订单号将用于多个订单,我不希望这样。
所以我使用 rabbit 来尝试解决这种情况,因为它是一个队列。似乎流程按应有的顺序完成,但是第二个流程不会等待第一个流程完成(ack)开始,所以最后我遇到了多次使用相同订单号的相同问题.
我是否可以将队列配置为一次处理一条消息?只有在进程 n 被确认后才启动进程 n+1?
这对我来说是救命稻草!
【问题讨论】:
-
我很困惑,让我们暂时将 RabbitMQ 排除在外。请更新问题,详细说明您的应用与 Oracle 之间的交互。 1)听起来您收到的订单会在您的应用程序中调用一个函数。我明白了 2) 这一点需要澄清:“处理订单,然后将 + 1 添加到数据库上的那个数字”。你要加 1 是什么?原来的号码是从哪里来的?数据库的一般流程是什么?在工作结束时只插入一个插页?在那之前你不需要订单号?
-
你说,“很遗憾我不能,因为它是客户的数据库(我的应用程序应该与现有应用程序集成)”你是说你要插入到现有的订单表中有任何逻辑来管理订单号吗?我的猜测是你错了。您应该询问客户订单号是如何生成的。
-
嗨,丹!是的,情况就像你说的那样,我正在插入一个现有的订单表,该表没有任何逻辑来管理订单号!...所以,我创建了一种控制订单处理和管理订单号的方法使用 Redis(因为确实没有对数据库进行管理)。当我把它展示给负责另一个应用程序的人时,他们根本不在乎......“它的工作原理就是这样,为什么现在改变?”......好吧,我想会有多个订单使用相同的号码我无能为力:(
-
我觉得这里有误会。你能告诉我们表格的定义吗?你知道如何为它生成 DDL 吗?看到这个:stackoverflow.com/questions/26249892/…
标签: node.js asynchronous rabbitmq queue message-queue