如何将多个消费者oracle AQ队列加入常规队列?我做错了什么?

如何将多个消费者oracle AQ队列加入常规队列?我做错了什么?,oracle,queue,oracle-aq,Oracle,Queue,Oracle Aq,我尝试为我们的应用程序开发排队机制。我的想法是准备一个标准解决方案,其中有一个应用程序app0生成事件,还有一个或多个应用程序app1、app2使用它们。 我需要发布者/订阅者队列主题,每个使用者应用程序一个队列,并使常规队列成为主题的订阅者: [app0] --enqueues-> [topic] <--subscribes-- [queue1] <--dequeues-- [app1] <--subscribes

我尝试为我们的应用程序开发排队机制。我的想法是准备一个标准解决方案,其中有一个应用程序app0生成事件,还有一个或多个应用程序app1、app2使用它们。 我需要发布者/订阅者队列主题,每个使用者应用程序一个队列,并使常规队列成为主题的订阅者:

[app0] --enqueues-> [topic] <--subscribes-- [queue1] <--dequeues-- [app1]
                            <--subscribes-- [queue2] <--dequeues-- [app2]
我根据发现的唯一一个示例编写了此代码:

看起来不错,但不幸的是不起作用。我试图在添加订阅者和安排传播时弄得一团糟。没有任何帮助

我希望此解决方案将消息从主题传递到queue1和queue2,但不会传递消息。他们排在原来的队伍里


我做错了什么?

可能是因为您正在使用非常旧的文档创建队列。甲骨文现在已经达到了20摄氏度。现在市场上的那个是19摄氏度。请使用以下文件作为参考


单击

我会看一看,谢谢。是的,但我似乎使用了正确的API和过程来完成此任务。它几乎没有改变。您如何使用队列中的消息?我在您的代码中没有看到运行出列部分的任何部分,我希望“传播”将完成从主题出列并进入常规队列的工作。我错了吗?我将使用java应用程序来使用来自常规队列的消息。
DECLARE
    subscriber sys.aq$_agent;
    v_queue_name_topic VARCHAR2(200) := 'my_topic';
    v_queue_name_consumer_1 VARCHAR2(200) := 'my_consumer_1';
    v_queue_name_consumer_2 VARCHAR2(200) := 'my_consumer_2';
BEGIN
    DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table => 't_' || v_queue_name_topic, queue_payload_type => 'SYS.AQ$_JMS_OBJECT_MESSAGE', multiple_consumers => true);
    DBMS_AQADM.CREATE_QUEUE (queue_name => v_queue_name_topic, queue_table => 't_' || v_queue_name_topic);
    DBMS_AQADM.START_QUEUE (queue_name => v_queue_name_topic);
    
    DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table => 't_' || v_queue_name_consumer_1, queue_payload_type => 'SYS.AQ$_JMS_OBJECT_MESSAGE', multiple_consumers => false);
    DBMS_AQADM.CREATE_QUEUE (queue_name => v_queue_name_consumer_1, queue_table => 't_' || v_queue_name_consumer_1);
    DBMS_AQADM.START_QUEUE (queue_name => v_queue_name_consumer_1);
    
    DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table => 't_' || v_queue_name_consumer_2, queue_payload_type => 'SYS.AQ$_JMS_OBJECT_MESSAGE', multiple_consumers => false);
    DBMS_AQADM.CREATE_QUEUE (queue_name => v_queue_name_consumer_2, queue_table => 't_' || v_queue_name_consumer_2);
    DBMS_AQADM.START_QUEUE (queue_name => v_queue_name_consumer_2);
    
    subscriber := sys.aq$_agent('Consumer1', v_queue_name_consumer_1, null);
    DBMS_AQADM.ADD_SUBSCRIBER(queue_name => v_queue_name_topic, subscriber => subscriber, queue_to_queue => true);
    
    subscriber := sys.aq$_agent('Consumer2', v_queue_name_consumer_2, null);
    DBMS_AQADM.ADD_SUBSCRIBER(queue_name => v_queue_name_topic, subscriber => subscriber);
    
    DBMS_AQADM.SCHEDULE_PROPAGATION(queue_name => v_queue_name_topic); 
END;