Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » QAnywhere » QAnywhere 参考 » QAnywhere SQL API 参考 » 消息管理

 

ml_qa_getmessagetimeout

等待指定超时期过后,返回排队等候给定地址的下一条消息的消息 ID。

参数
说明 注释
1 地址 VARCHAR(128)
2 以毫秒为单位的超时时间 INTEGER
返回值

VARCHAR(128) 形式的消息 ID。

如果在超时期内没有消息排队等候此地址,则返回空值。

注释

此存储过程用于同步检查是否有消息在等候指定的 QAnywhere 消息地址。如果想在有消息等候指定的 QAnywhere 地址时异步调用 SQL 过程,则使用监听器。

在当前事务提交之前,与返回的消息对应的消息将不被视为已收到。一旦接收被提交,此 QAnywhere API 或其它任何 QAnywhere API 就不能再次收到该消息。同样,对当前事务的回退表示未收到该消息,这样,对 ml_qa_getmessage 的后续调用可能会返回同一个消息 ID。

在对当前事务执行提交或回退之前,可由各种 ml_qa_get 存储过程读取已接收消息的属性和内容。一旦对当前事务执行了提交或回退,就不能再读取消息数据了。在提交之前,应以表格形式或在 SQL 变量中存储您所需要的任何消息数据。

另请参见
示例

下面的示例将发送到地址 myaddress 的所有消息的内容输出到数据库服务器消息窗口;如果未收到任何消息,则每隔 10 秒钟更新一次数据库服务器消息窗口:

begin
    declare @msgid varchar(128);
    loop
        set @msgid = ml_qa_getmessagetimeout( 'myaddress', 10000 );
        if @msgid is null then
            message 'waiting for a message...';
        else
            message 'a message with content ' || ml_qa_gettextcontent( @msgid ) || ' has been received';
        commit;
        end if;
    end loop;
end