0

Oracle AQ マルチコンシューマ キューに接続するクライアント アプリケーションがあります。OracleAQQueue.Listen を使用して、キューの新しいメッセージをリッスンしたいと考えています。 API ドキュメントは、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 を呼び出す前に一部のプロパティを正しく設定していないのですが、問題がわかりません。

何か案は?

4

1 に答える 1

0

『Streams Advanced Queuing User's Guide』の第 10 章「PL/SQL を使用した Oracle Streams AQ 操作」で、次の注記に出くわしました。

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

どこにも明記されていませんが、同じルールが ODP.NET API にも当てはまると思います。

于 2016-09-07T13:45:49.207 に答える