在Multiconsumer队列上使用ODP.NET OracleAQQueue.Listen

时间:2016-07-27 16:58:10

标签: oracle odp.net oracle-aq

我有一个连接到Oracle AQ多用户队列的客户端应用程序。我想使用OracleAQQueue.Listen来侦听队列中的新消息。 API docs表明Listen方法可用于多用户队列。我收听队列的代码如下所示。

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 });
}

我遇到的问题是在我调用queue.Listen()的代码行上,我得到Oracle异常:

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

Google搜索有关此特定错误的建议并没有太大帮助。我已经多次删除并重新添加我的订阅者到队列中无济于事。我的猜测是我在拨打Listen之前没有正确设置一些属性,但我无法弄清楚问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我在“{3}}中的Streams高级排队用户指南”中查看了以下注释:

MyApplicationClass.java

虽然我无法在任何地方找到它明确说明,但我猜这个规则适用于ODP.NET API。