【发布时间】:2015-06-20 08:24:49
【问题描述】:
我有一个 DB2 表,其中包含要通过 MQ 发送到外部系统的大量记录。表中有一列包含记录状态(已发送或待发送)。
我编写了一个调度程序来不断检查表中是否有“待发送”的记录。如果是,程序将发送待处理的记录并相应地更新状态
该计划将在多个事务中启动。因此,我预计同一程序的多个实例将同时运行
我的问题是如何防止多个调度程序同时拾取和发送相同的记录?
有人告诉我将游标与行级锁一起使用?但我不确定这是如何工作的
备注:我正在 z/os 环境下做 CICS COBOL
【问题讨论】:
-
与其浪费资源不断地启动一些东西来查看数据库,不如在执行“待处理”时不直接执行 MQ?您如何看待“调度程序”程序?
-
@BillWoodger 背后有一段很长的故事。发出的消息将得到计数器系统的确认。有发送消息的阈值。假设有 500 条消息正在发送但没有确认,我们将需要停止发送更多消息。所以有一些逻辑来确定和发送消息。但是多个实例使情况变得复杂
-
您需要使用所有相关信息更新您的问题(使用问题下方的编辑链接)。我们不能做整个设计,因为我们不知道一切。编写自己的“调度程序”非常复杂,而且很难在不影响其他处理的情况下完成。自动触发无限多个任务是个坏主意。 Checker 和 doer 甚至访问相同的数据。如果您在队列中有记录,您可以随时检查并在必要时重新排队。
标签: concurrency db2 cobol zos cics