我有一个连接到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之前没有正确设置一些属性,但我无法弄清楚问题。
有什么想法吗?
答案 0 :(得分:0)
我在“{3}}中的Streams高级排队用户指南”中查看了以下注释:
MyApplicationClass.java
虽然我无法在任何地方找到它明确说明,但我猜这个规则适用于ODP.NET API。