Dequeue中的Oracle Advanced Queue线程安全性

时间:2016-07-19 09:48:55

标签: oracle

我有多个消费者启用的Oracle AQ。我想在多线程中从Java中取出Q值。 我的问题:是否允许使用mulltithread访问dequeue或者我必须添加一些同步块? 在此先感谢您的帮助。请遵守相关规范并提供宝贵的意见。

下面给出了代码段。

private void dequeueTaskInfo(OracleConnection conn, String p_aConsumerName, String p_aQueueName, String p_aPayloadType) throws SQLException 
{
    System.out.println("----------- Dequeue start ------------");

    AQDequeueOptions deqopt = new AQDequeueOptions();
    deqopt.setRetrieveMessageId(true);
    if(p_aConsumerName != null)
    deqopt.setConsumerName(p_aConsumerName);

    deqopt.setWait(2);  

    AQMessage msg = conn.dequeue(p_aQueueName,deqopt,p_aPayloadType);

    if(msg!=null)
    {
     STRUCT struct = msg.getSTRUCTPayload();

     long l_scheduleid = ((struct.getOracleAttributes()))[0].longValue();
     Clob clobMsg = (Clob) ((struct.getOracleAttributes())[1]);
     String l_taskDetails = clobMsg.getSubString(1, (int) clobMsg.length());
     String l_access = ((struct.getOracleAttributes())[2]).stringValue();


     //WRITE CODE TO FORWARD the message

    }
    else
    {
     System.out.println("No data in queue..........");
     conn.close();
    }
}

0 个答案:

没有答案