在多消费者队列上使用 ODP.NET OracleAQQueue.Listen
Using ODP.NET OracleAQQueue.Listen on a Multiconsumer Queue
我有一个连接到 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
谷歌搜索关于这个特定错误的建议并没有太大帮助。我已经多次删除并重新添加我的订阅者到队列中,但都无济于事。我的猜测是我在调用 Listen 之前没有正确设置一些 属性,但我无法找出问题所在。
有什么想法吗?
我 运行 在 Streams Advanced Queuing User's Guide 中的以下注释中,在 Chapter 10 - Oracle Streams AQ Operations Using PL/SQL:
Note: Listening to multiconsumer queues is not supported in the Java API.
虽然我找不到任何地方明确说明,但我猜同样的规则适用于 ODP.NET API.
您必须将可见性属性设置为“立即”才能使用缓冲消息传递。
我有一个连接到 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
谷歌搜索关于这个特定错误的建议并没有太大帮助。我已经多次删除并重新添加我的订阅者到队列中,但都无济于事。我的猜测是我在调用 Listen 之前没有正确设置一些 属性,但我无法找出问题所在。
有什么想法吗?
我 运行 在 Streams Advanced Queuing User's Guide 中的以下注释中,在 Chapter 10 - Oracle Streams AQ Operations Using PL/SQL:
Note: Listening to multiconsumer queues is not supported in the Java API.
虽然我找不到任何地方明确说明,但我猜同样的规则适用于 ODP.NET API.
您必须将可见性属性设置为“立即”才能使用缓冲消息传递。