Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Oracle AQ出列顺序_Java_Oracle_Advanced Queuing - Fatal编程技术网

Java Oracle AQ出列顺序

Java Oracle AQ出列顺序,java,oracle,advanced-queuing,Java,Oracle,Advanced Queuing,Oracle 10g中的触发器为常规表中的行子集生成upsert和delete消息。这些消息由两个字段组成: 唯一的行id 非唯一id 在使用这些消息时,我希望对deque流程施加一个遵守以下约束的命令: 消息必须按插入顺序退出队列 属于同一id的消息必须以这样的方式出列,即任何其他出列进程都不应能够将具有此id的潜在后续消息(或多条消息)出列。由于消息是使用触发器生成的,因此我无法为此使用组 我正在使用Oracle Java接口进行AQ。有关于如何实现这一点的指示吗?我认为默认的出列顺

Oracle 10g中的触发器为常规表中的行子集生成upsert和delete消息。这些消息由两个字段组成:

  • 唯一的行id
  • 非唯一id
在使用这些消息时,我希望对deque流程施加一个遵守以下约束的命令:

  • 消息必须按插入顺序退出队列
  • 属于同一id的消息必须以这样的方式出列,即任何其他出列进程都不应能够将具有此id的潜在后续消息(或多条消息)出列。由于消息是使用触发器生成的,因此我无法为此使用组

我正在使用Oracle Java接口进行AQ。有关于如何实现这一点的指示吗?

我认为默认的出列顺序是先进先出,因此它们将按照与排队相同的顺序出列

关于第二点,您是说要序列化非唯一id上的出列吗?也就是说,您的队列中基本上有许多队列,并且您只希望一个作业在任何时候使用来自每个队列的消息

Ie,您有以下消息:

1 | a
2 | a
3 | b
4 | a
这里有两种类型的记录(a和b),您希望一个作业使用所有a,另一个作业使用所有b。如果是这样的话,可以考虑创建多个队列吗?

如果多个队列失败,请查看您传递给出列过程的出列选项类型-最明显的是出列条件-这允许您仅选择特定消息,以便您可以为所有a启动一个作业,为所有b启动另一个作业等。

N队列不是一个选项(有很多不同的id,使用寿命相对较短)。出列选项方法的问题是,我需要对尚未在队列中的未来消息(具有相同id)进行某种锁定。否则,另一个使用者C2可能会在使用者C1消费完1(均为“a”型消息)之前消费消息2.ATM我认为这个问题可以通过NOWAIT(timeout=>0)用户锁来解决,但我不相信AQ中没有“本机”解决方案。