1

Oracle 10g のトリガーは、通常のテーブルの行のサブセットに対して upsert および delete メッセージを生成します。これらのメッセージは、次の 2 つのフィールドで構成されています。

  • 一意の行 ID。
  • 一意でない ID。

これらのメッセージを消費するとき、次の制約を尊重する deque プロセスに順序を課したいと思います。

  • メッセージは挿入順にデキューする必要があります。
  • 同じ ID に属するメッセージは、他のデキュー プロセスがこの ID を持つ潜在的な後続メッセージをデキューできないような方法でデキューする必要があります。メッセージはトリガーを使用して生成されるため、この目的でグループを使用することはできません。

AQ に Oracle Java インターフェイスを使用しています。それをどのように達成できるかについての指針はありますか?

4

1 に答える 1

2

私が信じているデフォルトのデキュー順序は先入れ先出しであるため、エンキューされたのと同じ順序でデキューされます。

2 番目の点として、一意でない ID でデキューをシリアル化したいということですか? つまり、基本的にキュー内に多くのキューがあり、一度に 1 つのジョブだけが各キューからメッセージを消費したいですか?

つまり、メッセージがあります:

1 | a
2 | a
3 | b
4 | a

ここでは、2 種類のレコード (a と b) があり、1 つのジョブですべての a を消費し、別のジョブですべての b を消費するとします。その場合は、おそらく複数のキューを作成することを検討してください。

複数のキューに失敗した場合は、dequeue プロシージャに渡す dequeue_options_t タイプを確認してください (最も顕著なのは dequeue_condition)。これにより、特定のメッセージのみを選択できるため、すべての a に対してジョブを開始し、すべての b に対して別のジョブを開始することができます。

于 2009-11-20T14:26:45.093 に答える