dnickels
dnickels

Reputation: 908

Using ODP.NET OracleAQQueue.Listen on a Multiconsumer Queue

I have a client app that connects to an Oracle AQ multi-consumer queue. I want to use OracleAQQueue.Listen to listen for new messages on the queue. API docs show that the Listen method can be used for multi-consumer queues. My code for listening to the queue is shown below.

string consumerName = "APPINST1";            
using (OracleConnection con = new OracleConnection(connectionString))
{
    con.Open();

    OracleAQQueue queue = new OracleAQQueue("MY_Q");
    queue.MessageType = OracleAQMessageType.Udt;
    queue.UdtTypeName = "MY_Q_MSG";
    queue.DequeueOptions.DeliveryMode = OracleAQMessageDeliveryMode.Persistent;
    queue.Connection = con;

    Console.WriteLine("Listening for messages...");
    queue.Listen(new string[] { consumerName });
}

The problem that I'm having is that on the line of code where I call queue.Listen(), I get the Oracle exception:

ORA-25295: Subscriber is not allowed to dequeue buffered messages 

Googling for advice on this particular error hasn't been too helpful. I've removed and re-added my subscriber to the queue several times to no avail. My guess is that I'm not setting some property correctly before I make the call to Listen, but I can't figure out the issue.

Any ideas?

Upvotes: 0

Views: 792

Answers (2)

Sathish Jaganathan
Sathish Jaganathan

Reputation: 1

You must set the visibility attribute to IMMEDIATE to use buffered messaging.

Upvotes: 0

dnickels
dnickels

Reputation: 908

I ran across the following note in the Streams Advanced Queuing User's Guide, in Chapter 10 - Oracle Streams AQ Operations Using PL/SQL:

Note: Listening to multiconsumer queues is not supported in the Java API.

Although I can't find it explicitly stated anywhere, I'm guessing the same rule applies to the ODP.NET API.

Upvotes: 0

Related Questions