C++ 如何通过在应用程序端获取通知来自动将消息出列
如果队列表中有一些数据。如何通过在我的应用程序端获取通知自动将消息出列 下面是我为将消息排队到队列表中而遵循的链接,它成功地发生了 我可以通过以下查询在计划时间看到我在队列表中排队的消息C++ 如何通过在应用程序端获取通知来自动将消息出列,c++,oracle,stored-procedures,oracle10g,oracle11g,C++,Oracle,Stored Procedures,Oracle10g,Oracle11g,如果队列表中有一些数据。如何通过在我的应用程序端获取通知自动将消息出列 下面是我为将消息排队到队列表中而遵循的链接,它成功地发生了 我可以通过以下查询在计划时间看到我在队列表中排队的消息 select user_data from queue_table; 下层是C++代码的链接,可以将消息排队。在下面的C++代码中,我可以在我的应用程序中手动地将数据排队。但是我希望通过通知自动开始自动排队,然后自动退出队列。请帮我一个忙,把它弄清楚。< /P> 我不知道这在C语言中是否可行,但是从PL/
select user_data from queue_table;
下层是C++代码的链接,可以将消息排队。在下面的C++代码中,我可以在我的应用程序中手动地将数据排队。但是我希望通过通知自动开始自动排队,然后自动退出队列。请帮我一个忙,把它弄清楚。< /P>
我不知道这在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;
开始
结束;
/
--创建订阅服务器,并注册回调过程
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
);
您必须将上述内容更改为从错误队列中读取,但我认为概念是相同的。我不知道如果队列中有内容,它将如何以这种方式自动退出队列?因为您正在通过调用DBMS_AQ.Register将存储过程注册为处理程序。然后,每次消息在队列中时都会调用此过程。请参阅以下连结:
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
);