我有多个消费者启用的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();
}
}