如何在Rabbit队列上使用同步消息?

问题描述 投票:0回答:1

我有一个node.js函数,需要针对我的应用程序上的每个订单执行该函数。在此函数中,我的应用程序从oracle数据库获取订单号,处理订单,然后在数据库中对该订单号加+1(由于该订单可能失败,因此需要在函数中进行最后处理,因此将不使用该编号)。

如果在时间T(异步)同时处理所有在时间T收到的订单,那么相同的订单号将用于多个订单,我不希望这样。

所以我用兔子试图纠正这种情况,因为这是一个队列。似乎进程按应有的顺序完成,但是第二个进程不等待第一个完成(确认),所以最后我遇到了相同的问题,即多次使用相同的订单号。

无论如何,我是否可以将队列配置为一次处理一封邮件?仅在已确认进程n时才启动进程n + 1?

这对我来说将是救生员!

node.js asynchronous rabbitmq queue message-queue
1个回答
0
投票

如果问题是避免重复的订单号,则在插入表中以生成订单号时,请使用Oracle序列或使用标识列:

CREATE TABLE mytab (
       id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY(START WITH 1),
       data VARCHAR2(20));
INSERT INTO mytab (data) VALUES ('abc');
INSERT INTO mytab (data) VALUES ('def');
SELECT * FROM mytab;

这将给:

        ID DATA
---------- --------------------
         1 abc
         2 def

如果问题是您希望顺序处理订单,那么在上一个订单完成之前,请勿从队列中提取订单。这将限制您的吞吐量,因此您需要了解您的要求并做出一些体系结构决策。

总的来说,Oracle Advanced Queuing会很合适。参见node-oracledb documentation on AQ

© www.soinside.com 2019 - 2024. All rights reserved.