-1

キューテーブルにデータが落ちた場合.アプリケーション側で通知を取得してメッセージを自動的にデキューする方法.

以下は、メッセージをキューテーブルにエンキューするためにたどっているリンクです。これは正常に行われています。

http://www.oratechinfo.co.uk/aq.html

スケジュールされた時間に、次のクエリを使用してキュー テーブルにエンキューしたメッセージを確認できます。

 select user_data from queue_table;

以下は、メッセージをデキューするための C++ コードへのリンクです。以下の C++ コードを使用すると、アプリケーション側でデータを手動でデキューできます。ただし、通知を取得して自動的にデキューを開始する方法が必要です。私に手を差し伸べて、はっきりさせてください。

http://docs.oracle.com/cd/A83908_02/NT816EE/DOC/nt.816/a99999/o4c00069.htm

4

1 に答える 1

1

これが C で可能かどうかはわかりませんが、PL/SQL からは、次のシグネチャを使用してコールバック プロシージャを作成します。

CREATE PROCEDURE demo_queue_callback_procedure(
                 context  RAW,
                 reginfo  SYS.AQ$_REG_INFO,
                 descr    SYS.AQ$_DESCRIPTOR,
                 payload  RAW,
                 payloadl NUMBER
                 ) AS

   r_dequeue_options    DBMS_AQ.DEQUEUE_OPTIONS_T;
  r_message_properties DBMS_AQ.MESSAGE_PROPERTIES_T;
  v_message_handle     RAW(16);
  o_payload            demo_queue_payload_type;

始める

  r_dequeue_options.msgid := descr.msg_id;
  r_dequeue_options.consumer_name := descr.consumer_name;

  DBMS_AQ.DEQUEUE(
     queue_name         => descr.queue_name,
     dequeue_options    => r_dequeue_options,
     message_properties => r_message_properties,
     payload            => o_payload,
     msgid              => v_message_handle
     );

    -- Do something with the payload received.  Must commit to get message out of table.

       COMMIT;

終わり; /

-- サブスクライバを作成し、コールバック プロシージャを登録します。

   DBMS_AQADM.ADD_SUBSCRIBER (
      queue_name => 'demo_queue',
      subscriber => SYS.AQ$_AGENT(
                       'demo_queue_subscriber',
                       NULL,
                       NULL )
      );

   DBMS_AQ.REGISTER (
      SYS.AQ$_REG_INFO_LIST(
         SYS.AQ$_REG_INFO(
            'DEMO_QUEUE:DEMO_QUEUE_SUBSCRIBER',
            DBMS_AQ.NAMESPACE_AQ,
            'plsql://DEMO_QUEUE_CALLBACK_PROCEDURE',
            HEXTORAW('FF')
            )
         ),
      1
      );

エラーキューから読み取るには上記を変更する必要がありますが、概念は同じだと思います。

于 2013-01-04T01:43:42.133 に答える