DBMS_AQ. DEQUEUE multi single consumer thread

Hi all

I have a table of Q for advanced queue. The line runs for a single consumer.

Currently, I have four tasks at the same time of waiting for the messages of the qtable above with the following properties.

DECLARE
   dopt   DBMS_AQ.DEQUEUE_OPTIONS_T;
BEGIN
   dopt.WAIT := DBMS_AQ.NO_WAIT;
   dopt.navigation := DBMS_AQ.FIRST_MESSAGE;
   dopt.dequeue_mode := DBMS_AQ.REMOVE;

DBMS_AQ.DEQUEUE (queue_name           => 'MPI_AQADM.AQ_PDRSYNC_PAID',
                    dequeue_options      => dopt,
                    message_properties   => mprop,
                    payload              => test_data,
                    msgid                => msg);


   COMMIT;
-- Use the pay load data to do some thing
END;

We are able to dequeue messages in all four jobs with the same code above.

My question is, is this OK to do, there will be expectations or congestion that happens? Y at - it a good or a means to achieve what I want to do in a more stable manner?

Thank you

G.

Hello

> I mean can two different jobs with consumers without name remove the same message?

> But you say it's possible?

No, it is not possible (I do not say this). There are competing situation, wherever one job will be a dequeue.

> Can you also throw some light on what other problems of stability I could face more?

Counterquestion:

Why should you have four jobs in order to remove the data?

There are performance reasons? What of the order (sequence) of your AQ payload data?

If you need more than one dequeue job, it is better to give them names.

Result: many consumers have been appointed.

Kind regards

WoG

Tags: Database

Similar Questions

  • Single Message thread backup icloud?

    Hello

    I was wondering if there is a way to select a single message to iCloud save thread. The reason: my brother has a 1 year old child and sends a thread of family group about 10 pictures per day, sometimes with a video. This sometimes others form picture answers. My iPhone 16GB 5 fills up quickly. The photos are cute, etc and I don't necessarily want their past (where the issue of backup), I just want to be able to take a picture of mine when I want without memory formidable opinion.

    To clarify, I don't want to back up all my posts on iCloud, and I don't want to limit the allocation of memory for messages (it would quickly reach quota). I want to be able to synchronize the thread of interest, then delete it. Is this possible?  I have an extra space on iCloud, which would easily handle this.

    This is not possible, I'm afraid. Indeed, if you delete something in your phone it don't stay in your back forever, the rear 3 last ups are stored in the cloud.

  • Need a tool to identify the most cpu consuming thread.

    I have the database Oracle running on Windows 2008 server edition.

    Recently the oracle process has begun to consume 100% cpu it is not the particular moment where it happens.
    This is why I need a tool to check the particular thread in oracle.exe process consuming more cpu which would help find most cpu of your session in the oracle database.
    Thank you

    Hello

    The Microsoft Answers community focuses on issues and problems related to the consumer environment. Please reach out to the community of professional support in the TechNet below:

    http://social.technet.Microsoft.com/forums/en/category/WindowsServer/

  • I can't access some pages (last page) in a multi page forum thread...

    I am not always able to navigate to all (recent or past a certain page) pages of a multipage forum thread... It may be the second page or, sometimes, on page 18... VBulletin site... That is to say the work and the previous version work...

    Have you started Firefox in saving mode because you wrote that you restarted and safe mode Windows is not intended?

    If this does not work in mode without failure, then disable all extensions and then try to find out who is the cause by allowing both the problem reappears.

    • Choose "Disable all add-ons" on issues to troubleshoot Firefox in Safe Mode to set window to disable all extensions.
    • Close and restart Firefox after each change through "file > exit ' (Mac: ' Firefox > leave";) Linux: "file > exit ')

    Create a new profile as a test to see if your profile is the source of the problems.

    See "basic troubleshooting: a new profile:

    There may be extensions and plugins installed by default in a new profile, so check that in "tools > Modules > Extensions & Plugins" in case there are still problems.

    If this new profile works then you can transfer files from the old profile to the new profile, but make sure not to copy corrupted files.

    See:

  • reduction #of consumer for a queue thread

    Hello
    I created a service proxy reading messages from a queue and it created 16 default consumer thread.
    Is there a way I can configure this number to create less number of threads of consumer?

    Published by: 818591 on January 24, 2011 14:10

    In the WLS console, create a job [http://download.oracle.com/docs/cd/E12839_01/apirefs.1111/e13952/pagehelp/Corecoreworkworkmanagerconfigtitle.html] Manager and associate a desired son constraint equal Max number of threads of consumer.
    In OSB, specify this name of Manager working in the policy configuration of the expedition for the proxy service.

  • Poster for the Notification of the Subscriber (dbms_aq.post) does not work as expected

    Hello

    I have the case study for the notification to the Subscriber specific QA that I had planned to use to send messages to the other sessions without subscriber . I just wanted to know feature QA POSITION.

    Well I tried and google hours and reading documentation, but I can't figure out what I did wrong. There is not much information about this post method.

    Expected result is a message in the my_queue_debug table, but there is nothing!

    Any ideas where it's going?

    Oracle 12 c EA

    --NAME            TYPE    VALUE 
    --------------- ------- -----
    --aq_tm_processes integer 1  
    --job_queue_processes integer 1000  
    
    --create user aq identified by aq
    --;
    --grant dba to aq
    --;
    --grant execute on dbms_aq to aq
    --;
    create table my_queue_debug(msg varchar2(100))
    ;
    create type my_payload as object (msg varchar2(100));
    /
    set serveroutput on
    begin
      dbms_aqadm.create_queue_table('my_queue_table', 'my_payload', multiple_consumers=>true);
      dbms_aqadm.create_queue('my_queue', 'my_queue_table');
      dbms_aqadm.start_queue ('my_queue');
      dbms_aq.register (
        sys.aq$_reg_info_list(
          sys.aq$_reg_info('my_queue:aq',
            dbms_aq.namespace_anonymous,
            'plsql://my_queue_callback',
            hextoraw('FF')
          )
        ), 1
      );
    end;
    /
    create or replace
    procedure my_queue_callback(
      context  raw,
      reginfo  sys.aq$_reg_info,
      descr    sys.aq$_descriptor,
      payload  raw,
      payloadl number
    ) as
      l_options    dbms_aq.dequeue_options_t;
      l_properties dbms_aq.message_properties_t;
      l_handle     raw(16);
      l_payload    my_payload;
    begin
      l_options.msgid := descr.msg_id;
      l_options.consumer_name := descr.consumer_name;
      --
      dbms_aq.dequeue(
        queue_name         => descr.queue_name,
        dequeue_options    => l_options,
        message_properties => l_properties,
        payload            => l_payload,
        msgid              => l_handle
      );
      --
      insert into my_queue_debug (
        msg
      ) values (
        l_payload.msg
      );
      commit;
    end;
    /
    begin
      dbms_aq.post(
        sys.aq$_post_info_list(
          sys.aq$_post_info(
            'my_queue:aq',
            dbms_aq.namespace_anonymous,
            utl_raw.cast_to_raw( 'my message' )
          )
        ), 1
      );
    end;
    /
    select user_data from aq$my_queue_table
    ;
    select * from my_queue_debug
    ;
    drop table my_queue_debug purge
    ;
    begin
      dbms_aqadm.stop_queue('my_queue');
      dbms_aqadm.drop_queue('my_queue');
      dbms_aqadm.drop_queue_table('my_queue_table');
    end;
    /
    drop type my_payload
    ;
    
    
    Table MY_QUEUE_DEBUG created.
    Type MY_PAYLOAD compiled
    PL/SQL procedure successfully completed.
    Procedure MY_QUEUE_CALLBACK compiled
    PL/SQL procedure successfully completed.
    
    no rows selected
    
    no rows selected
    
    Table MY_QUEUE_DEBUG dropped.
    PL/SQL procedure successfully completed.
    Type MY_PAYLOAD dropped.
    
    
    
    

    Hello

    change your reminder of PL/SQL procedure, that it will only insert a line:

    create or replace procedure my_queue_callback(
      context  raw,
      reginfo  sys.aq$_reg_info,
      descr    sys.aq$_descriptor,
      payload  raw,
      payloadl number ) as  
    
      l_options    dbms_aq.dequeue_options_t;
      l_properties dbms_aq.message_properties_t;
      l_handle     raw(16);
      l_payload    my_payload;  
    
    begin  
    
      insert into my_queue_debug ( msg ) values ( 'this is a test payload');
    
      commit;  
    
    end;
    /
    

    Change the entry in the register of the recall without a consumer:

    begin
    
      dbms_aq.register (
        sys.aq$_reg_info_list(
          sys.aq$_reg_info('my_queue',
            dbms_aq.namespace_anonymous,
            'plsql://my_queue_callback',
            hextoraw('FF')
          )
        ), 1
      );  
    
    end;
    /
    

    The unit test works now:

    SQL>
    SQL> select * from my_queue_debug;
    
    no rows selected
    
    SQL>
    SQL> begin
      2
      3    dbms_aq.post(
      4      sys.aq$_post_info_list(
      5        sys.aq$_post_info(
      6          'my_queue',
      7          dbms_aq.namespace_anonymous,
      8          utl_raw.cast_to_raw( 'my message' ) ) ), 1 );
      9
     10  end;
     11  /
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL>
    SQL> exec  dbms_lock.sleep(10);
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select * from my_queue_debug;
    
    MSG
    -----------------------------------------------------------
    this is a test payload
    

    It is important to do not query the table immediately after the message. The callback mechanism needs a bit of time.

    Kind regards

    WoG

  • Multi between 5.2 and 6.3.1 replication

    I have a setup where I have a master running consumer version 5.2 and about 15 (slaves) who have been upgraded to 6.3.1. I now want to create a topology of master multi by the promotion of one of these consumers as a master and always keep the used 5.2 because we have a bunch of other applications that depend on the instance of 5.2. Our master has two suffixes. The master server is also the authority of cert CA for all consumers. After reading the docs, I have narrowed down the procedure to

    1 promote one of the 6.3.1 consumers to the hub, then to master using promote repl dsconf orders. The problem here is that I don't know how I can create a single consumer who can slave the two suffixes. We currently have them being enslaved to different consumers.

    Also do I have to stop existing replication between captain 5.2 and would be 6.3.1 master to popularize the hub and master.

    2 set the replication Manager manually or using game-server-prop dsconf on the new 6.3.1 master.
    3. create a new replication of 5.2 to 6.3.1 master agreement without initializing. (using the java console)
    4 create new replication agreement, 6.3.1 to 5.2 (using the command line)
    5. create new repl agreements between the new 6.3.1 master and all other consumers. For that I have to start by disabling all agreements between 5.2 and 6.3 or can I create new agreements without turning off the 'old'?

    6 initialize 6.3.1 master 5.2.

    My biggest concern is at this time surrounding ssl certificates and the existing approvals, consumers have with the master of 5.2. Currently my 5.2 server acts CA of our management of certificates with the slaves of ldap authorization. How can I migrate this functionality on the new server and also will it affect how slaves communicate on the new master server?

    Thanks in advance.

    The situation of having teachers who cannot replicate to all other masters is something you need to fix, because that's probably what could cause a blockage of the replication.

    Anyway, back to your environment, if you initialized the 6.3.1 masters with 5.2 content and to put in place already 5.2-> 6.3.1 replication you should be ok.

    The steps you described are correct and you can perform while the servers are on the rise and running, just check if you have to change also the property of "auth-bind-dn" of the replication agreement.

    Finally, the creation-repl-agmt creates just the replication agreement, it is not initialize the target.

    You can check the status with:

    # dsconf see the repl-agmt-registered - p 389 dc = xxxxx, dc = com <5.2-master>: 389

    HTH,
    Marco

  • Call any thread DLLs the application crashes

    I have a built in 2015-labview application that acquires spectra of 6 spectrometers via an external dll. The dll triggers an event in labview when data is ready to be pulled from the spectrometers. Since this event, I am running a reentry no void / vi which contains a node function to retrieve the data, that are configured to run in any thread, as it gives a drastic improvement of performance as apposed to run in the UI thread.

    However this can slow down the application crash with a message from windows like the following journal:

    Name of the failing application: axiom 2.0.exe, version: 1.0.0.82, time stamp: 0x5581a6b7
    The failed module name: lvrt.dll, version: 15.0.0.4024, time stamp: 0x5581ac03
    Exception code: 0xc0000005
    Offset: 0x0000000000bec7c0
    ID of the process failed: 0x15c0
    Start time of application vulnerabilities: 0x01d11e6face9febd
    The failing application path: C:\Axiom 2.0\builds\Axiom 2.0\Axiom 2.0.exe
    Path of the failing module: C:\Program NIUninstaller Instruments\Shared\LabVIEW Run-Time\2015\lvrt.dll
    Report ID: 7d4ef3a8-8a91-11e5-94e9-90b11c894ef8

    I don't know if the dll is said to be thread safe or not. Also I do not understand how this causes a problem anyway since it is the only node that accesses the dll at the time, and each of the 6 spectrometers are interviewed in order?

    Is there anyway that I can still enjoy the benefits that the call of any thread dll provides without causing my application crash.

    An example of the increase in performance, it's that I can query the spectrometer from 6 to 70-80 Hz when configured to run in any thread, as opposed to a simple 10 Hz when the Run value in the UI thread.

    Thank you

    Jimmy01 wrote:

    I don't know if the dll is said to be thread safe or not. Also I do not understand how this causes a problem anyway since it is the only node that accesses the dll at the time, and each of the 6 spectrometers are interviewed in order?

    Is there anyway that I can still enjoy the benefits that the call of any thread dll provides without causing my application crash.

    Looks like that the DLL is not thread-safe. If you do not run in the UI thread, there is no guarantee that the DLL will be always called from the same thread, even if you only call it in one no reentrante Subvi. By default, LabVIEW allocates multiple threads by the enforcement system, with the exception of the user interface. If the DLL stores certain information of one call to the other, this context can be lost when run in a different thread.

    Here's a thread that provides two possible solutions; a wrapper DLL is required, use the other the utility 'threadconfig' (or the corresponding INI file settings) to force a subsystem of a thread executing unique http://forums.ni.com/t5/LabVIEW/Force-DLLs-to-tun-in-the-same-thread-expect-the-UI-Thread/td-p/11438...

    Another option would be to put the call to the DLL in a timed loop that runs constantly, and you can use a queue or the notifier to pass data to. A timed loop runs in a single dedicated thread, so I think it will work.

  • Learn how to use queues producer consumer event

    Hi all

    I'm trying to understand the good programming techniques for the use of the elements of the queue in a producer / consumer event-driven program. I am looking for some demonstration programs have an idea of the functioning of these looops-based. Currently, I'm not sure on how to deal with errors that occur before an event from the queue (see screen capture below).

    If a queue receives an error, it seems that the queue item is never received. I have an OR statement to stop the producer loop when it receives an error message. However, because the question has never been in queue, dequeue in the consumer just loop element crashes then the consumer don't never closed loop the while loop.

    What are some good techniques to handle errors that are placed in a queue? I could probably cable a timeout on the dequeue, but I prefer not to use this approach if possible.

    Thank you


  • Why almost all javafx methods must be called from the thread of the application?

    I have a pretty big 3D scene that is refreshed every few seconds.

    It takes a while to update the scene, and I wanted to do it in a background thread.

    Problem is that almost every approach I take requires the application-fx thread.

    Now, I understand that change the UI itself must be called in the application thread, so I tried a different approach:

    Create a new group, add all the nodes (which takes the greatest amount of time) and update the component root of the view with the new group.

    I assumed that only the last party required the application thread, but alas this was not the case.

    group.getChildren () .add also requires that the thread of the application. Why?

    node.setLayoutX () also requires that the thread of the application. Why?

    It is a new set of nodes that are not visible and groups yet, so why can't do this in a background thread?

    The reasons of principle (I think) that JavaFX is mainly a single toolbox threaded are described in:

    https://weblogs.Java.net/blog/2004/10/19/multithreaded-toolkits-failed-dream

    That said, if you manipulate objects that are not part of an active scene, then it should work.  The dream that failed has what to do with the components who participate actively in the molten, interactive GUI.  If you're interacting with only the components out of the screen, then it (should be) without issue.

    Please, create and post an example minimum, executable that replicates the question.

    (Please ensure that the example is minimal and executable).

    In addition, what is the cause as your application "takes some time to update the scene?  Computers are today quite incredibly fast.  Of course, there are valid reasons for some things take time, I wonder what these are in your case.  What is the time?  If your executable example can include something reasonably representative of what you're done which shows something that will take "some time", would be great.

    What you have described so far, I feel that, even if there is no problems with threads, your proposed approach would not fix your performance problem.

  • How one thread can run multiple runnables?

    Hi What follows is 1.6 api documentation
    Executors.newSingleThreadExecutor() 
              Creates an Executor that uses a single worker thread operating off an unbounded queue.
    It should provide the Runnable when the thread is built himself, and once the thread ends the execution of its run the thread method is dead and cannot be started again as a thread.

    But the doc above indicates that a single worker thread is enough to execute Runnables queue. How it possible?

    Myriam wrote:
    But the doc above indicates that a single worker thread is enough to execute Runnables queue. How it possible?

    Nothing prevents you from creating a Thread that has a list of Runnables and call its run() method one after the other.

    new Thread(new Runnable() {
        public void run() {
            for(Runnable r : listOfRunnables)
                r.run();
            }
        }
    }).start();
    

    Threading tips base.

  • DSP generator for android multi folio app needed?

    Hello, I am trying to create an app for android tablets. I need only a single edition of the DSP, but read that the DSB generator offers multi single folio apps for androids have I need a DSP Professional license?

    Thanks for any help.

    Currently, creating Android applications is available with professionals of DPS and business licenses. With simple editing of DPS, you can create an iPad only app.

  • job creation for listening to the queue unique consumer

    I have the code that will allow listening on a queue for a queue of the mulitple consumer but I was wondering how to change it to a queue of each consumer. The code that I currently have for the many conusmer looks like this

    DBMS_SCHEDULER. () DEFINE_METADATA_ARGUMENT
    program name = > 'P_ToDBlocking_Implement '.
    argument_position = > 1
    , metadata_attribute = > 'EVENT_MESSAGE '.
    );
    dbms_scheduler. Enable ('P_ToDBlocking_Implement');

    DBMS_SCHEDULER. () CREATE_EVENT_SCHEDULE
    schedule_name = > 'S_ToDBlocking_Implement '.
    , start_date = > systimestamp
    , event_condition = > ' corrid'art = "NOTIFY" '
    queue_spec = > 'event_msg_q');
    Maybe I think over this evil how can I get a consumer in a queue single consumer to listen to the queue and process all queues that come in?

    Published by: user457357 on Sep 12, 2008 12:19 AM

    Makes sense. But why take away with work planned and not with a stored procedure?

    Take a look at this demo:
    http://www.psoug.org/reference/aq_demo1.html

    What features do you need not included in the demo?

  • Advanced Queuing (correlation id feature)

    Nice day!

    I'm studying Oracle Advanced Queuing concepts and have faced with the idea that I don't understand: correlation id feature. I'd be happy if someone could clarify this matter for me.

    Say we have several of your queue and I add a subscriber to it and I'm specifies the rule to dequeue for this Subscriber:

    begin
        dbms_aqadm.add_subscriber(queue_name => 'aq_admin_plsql.msg_queue'
                         ,subscriber => sys.aq$_agent(name => 'APP1', address => null,protocol => null)
                         ,rule => q'[corrid='111']');
    end;
    /
    

    I guess the part above the code means that the consumer "APP1" can only dequeue messages with message_properties.correlation: = '111';

    Am I correct in saying this and if not what one hears the argument of rule for?

    Unfortunately, my hypothesis seems to be false. I would like to show the test case to explain.

    CONNECT / as sysdba
    
    CREATE USER aq_admin_plsql IDENTIFIED BY aq_admin_plsql
      DEFAULT TABLESPACE users
      TEMPORARY TABLESPACE temp;
    
    
    ALTER USER aq_admin_plsql QUOTA UNLIMITED ON users;
    
    
    GRANT aq_administrator_role TO aq_admin_plsql;
    GRANT connect               TO aq_admin_plsql;
    GRANT create type           TO aq_admin_plsql;
    GRANT create sequence       TO aq_admin_plsql;
    grant resource to aq_admin_plsql;
    grant create  procedure to aq_admin_plsql;
    
    
    EXECUTE dbms_aqadm.grant_type_access('aq_admin_plsql');
    ;
    grant create  procedure to aq_admin_plsql;
    
    
    EXECUTE dbms_aqadm.grant_type_access('aq_admin_plsql');
    

    CONNECT aq_admin_plsql/aq_admin_plsql
    
    
    CREATE TYPE message_type AS OBJECT (
        message_id     NUMBER(15)
      , subject        VARCHAR2(100)
      , text           VARCHAR2(100)
    )
    /
    
    
    
    CREATE SEQUENCE message_seq
           INCREMENT BY 1
           START WITH 1000
           NOMAXVALUE
           NOCYCLE;
    
    
    
    

    CONNECT aq_admin_plsql/aq_admin_plsql
    SET SERVEROUTPUT ON
    
    
    BEGIN
    
    
        -- -------------------------------------------------------
    
    
        DBMS_AQADM.CREATE_QUEUE_TABLE (
            queue_table         => 'aq_admin_plsql.msg_qt'
          , queue_payload_type  => 'aq_admin_plsql.message_type'
          , sort_list           =>  'priority,enq_time'
          , multiple_consumers  =>  TRUE
        );
    
    
        -- -------------------------------------------------------
    
    
        DBMS_AQADM.CREATE_QUEUE (
            queue_name          => 'msg_queue'
          , queue_table         => 'aq_admin_plsql.msg_qt'
          , queue_type          => DBMS_AQADM.NORMAL_QUEUE
          , max_retries         => 0                        --max number of dequeue retries (rollbacks) before moving to exception queue
          , retry_delay         => 0                        --after failure, delay before msg can be dequeued again
          , retention_time      => 100                        --time in which msg remains in the queue table after dequeuing
          , dependency_tracking => FALSE                    -- not currently implemented
          , comment             => 'Test Object Type Queue'
          , auto_commit         => FALSE                    --deprecated
        );
    
    
        -- -------------------------------------------------------
    
    
        DBMS_AQADM.START_QUEUE('msg_queue');
    
    
        -- -------------------------------------------------------
    
      dbms_aqadm.add_subscriber(queue_name => 'aq_admin_plsql.msg_queue'
                         ,subscriber => sys.aq$_agent(name => 'APP1', address => null,protocol => null)
       ,rule => q'[corrid='111']');
    
    
    END;
    /
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    Now, the queue of the message with the correlation id say '222'.

    CONNECT aq_admin_plsql/aq_admin_plsql
    
    
    DECLARE
       enqueue_options      DBMS_AQ.ENQUEUE_OPTIONS_T;
       message_properties   DBMS_AQ.MESSAGE_PROPERTIES_T;
       message_handle       RAW (16);
       MESSAGE              aq_admin_plsql.MESSAGE_TYPE;
    BEGIN
       MESSAGE :=
          AQ_ADMIN_PLSQL.MESSAGE_TYPE (aq_admin_plsql.message_seq.NEXTVAL,
                                       'Subject: EXAMPLE MESSAGE',
                                       'Message: THIS IS A SAMPLE MESSAGE.');
    
    
       ------------------------------------------------------------------------
       enqueue_options.VISIBILITY := DBMS_AQ.ON_COMMIT; --ON_COMMIT - the enqueue is part of the current transaction
       enqueue_options.SEQUENCE_DEVIATION := NULL;                    --deprecated
       
       ----------------------------------------------------------------------------
       message_properties.priority := -5; --priority of message. Smaller number = higher priority, may be negative.
       message_properties.delay := DBMS_AQ.NO_DELAY; --Is the number of seconds for which the message is in the WAITING state.
       message_properties.expiration := DBMS_AQ.NEVER; --Is the number of seconds during which the message is available for dequeuing, starting from
       message_properties.correlation := '222'; --Is an identifier supplied by the producer of the message at the time of enqueuing the message.
       message_properties.recipient_list(1) := sys.aq$_agent('APP1', null, null); 
    
    
       ------------------------------------------------------------------------------------------------------------
       DBMS_AQ.ENQUEUE (queue_name           => 'aq_admin_plsql.msg_queue',
                        enqueue_options      => enqueue_options,
                        message_properties   => message_properties,
                        payload              => MESSAGE,
                        msgid                => message_handle     --out_parameter
                                                              );
    
    
       COMMIT;
    ----------------------------------------------------------------------------------------------
    END;
    /
    
    
    
    
    
    
    
    
    

    We can verify that the message has managed to put in the queue.

    select t.MSG_ID, t.CORR_ID, t.MSG_STATE, t.CONSUMER_NAME
    from aq$msg_qt t
    ; 
    

    MSG_ID(2)CORR_IDMSG_STATECONSUMER_NAME
    14506AAED0CCBA48E055000000000001222LOANAPP1

    Now, I do the dequeue the message defines the name of the consumer to "APP1" and I think that the message will not be removed because we have a rule for this Subscriber: corrid'art = '111'

    DECLARE
       dequeue_options      DBMS_AQ.DEQUEUE_OPTIONS_T;
       message_properties   DBMS_AQ.MESSAGE_PROPERTIES_T;
       message_handle       RAW (16);
       MESSAGE              aq_admin_plsql.MESSAGE_TYPE;
    BEGIN
       ------------------------------------------------------------
       dequeue_options.consumer_name := 'APP1'; --Indicates the consumer for multi-consumer queues.
       dequeue_options.dequeue_mode := DBMS_AQ.remove;
       dequeue_options.navigation := DBMS_AQ.FIRST_MESSAGE;
       dequeue_options.visibility := DBMS_AQ.IMMEDIATE;
       dequeue_options.wait := DBMS_AQ.FOREVER;
       dequeue_options.msgid := NULL;
       --------------------------------------------------------------
    
    
       DBMS_AQ.dequeue (queue_name           => 'aq_admin_plsql.msg_queue',
                        dequeue_options      => dequeue_options,
                        message_properties   => message_properties --out parameter
                        , payload              => MESSAGE            --out parameter
                        , msgid                => message_handle     --out parameter
                       );
    
    
    
    
       DBMS_OUTPUT.put_line ('+-----------------+');
       DBMS_OUTPUT.put_line ('| MESSAGE PAYLOAD |');
       DBMS_OUTPUT.put_line ('+-----------------+');
       DBMS_OUTPUT.put_line ('- Message ID   := ' || MESSAGE.message_id);
       DBMS_OUTPUT.put_line ('- Subject      := ' || MESSAGE.subject);
       DBMS_OUTPUT.put_line ('- Message      := ' || MESSAGE.text);
    
    
       COMMIT;
    END;
    /
    
    
    
    
    
    
    
    
    

    However, the message seems to be removed:

    select t.MSG_ID, t.CORR_ID, t.MSG_STATE, t.CONSUMER_NAME, t.DEQ_TIME, t.DEQ_USER_ID, t.DEQ_TXN_ID
    from aq$msg_qt t
    ; 
    

    MSG_ID(2)CORR_IDMSG_STATECONSUMER_NAMEDEQ_TIMEDEQ_USER_IDDEQ_TXN_IDQUEUE
    14506AAED0CCBA48E055000000000001222PROCESSEDAPP122.04.2015 16:53:11AQ_ADMIN_PLSQL8.29.2818MSG_QUEUE

    It seems strange, isn't it?

    To put it in a Word so my question is:

    1. How could the queue breaking the rules of correlation id? If it works as designed then what is the reason for the correlation id?

    I thank very you much in advance! I'd appreciate any help.

    Hello

    your problem in your example is that you have addressed your message explicitly to the Subscriber (line #21):

    message_properties.recipient_list(1) := sys.aq$_agent('APP1', null, null);
    

    This Subscriber will still get the info that there are new messages. Normally, you do not know the subscribers for messages

    and you don't publish it. If you remove this line then the rule is analyzed. For the payload parameter value "YYY", you will get:

    ORA-24033: no recipients for message
    

    Kind regards

    WoG

  • Update of the indicators of the façade is trolling in the test of the functions in the provider DLL

    I'm looking to see if someone can explain a behavior to display weird LabVIEW I see when to test some timeout works in a third party DLL. I have a work around in place but I would still like to know why, without the workaround, the information displayed by the indicators on the front panel are not synchronized with what is happening in the execution of the VI, even though I tried all sorts of things to impose the synchronization. Note that to run the VI in a useful way, you need to be able to communicate with a Galil axes via an Ethernet controller, and which, for the most part, limited this discussion to what the experts among you know happen under the hood of LabVIEW in situations like this.

    This is what looks like the VI when my work around (false wait added) is active. It's a small state machine that uses the elements of the array "Test Sequence" to tell him what to do in each step of its implementation. Here he plays a first time-out value, sets a new value of timeout, reading again, the timeout by asking a READING of the controller (without having first asked to say anything), followed by restoring the initial time-out and then tests to stop.  The two indicators in the red rectangle are there to show the current status of the execution, and it is this pair of indicators which are not synchronized with the State of the actual program.

    When execution completes, it is what we see.

    If the false timeout is too short, then the indicators are not synchronized with the State of the program, or in this case, with the other.  Note that the only time wherever the VI display is static enough for me to take a screenshot as it is during the period of "Test Timeout. When the time-out occurs Finally, things be synchronized and the same results are displayed.

    Here's the code.  I am also attaching a folder zipped with the code, just because I don't know if the extracts are smart enough to include all the dll referenced by library call nodes.

    Here on the left of the loop indicator 'State' and 'Index' terminals can be seen. The 'fake Wait' needed to make the indicators work synchronously appears below in the same area. Before coming with this 'fix' things I've tried, what has not worked, were:

    • addition of the structure of flat sequence seen here with the indicators in the first panel
    • Entrance to the 'value' property nodes using linked to two indicators with their outputs error Garland at the entrance of the error on the function 'G Read' (test timeout).
    • defining indicators for "synchronous display" (apparently this parameter actually only works with the multi-threaded code, which I don't believe it is)
    • setting false property to "postpone updates on the front panel.

    Another thing that worked linked a "probe" to any data path entrance side of the conditional structure. I thought that it causes also a few milliseconds of delay as the expectation.

    My best guess at what happens is that display updates are "launch and forget" actions that occur on parallel execution paths in the single execution thread and function on obtaining some of the main process to complete time slices. But when the main process is the name of an external library, which, outside the library can't share time with all other processes that can run in the same thread.  All this makes sense?

    This is because all these CFLN calls to the dll are set to run in the UI thread (to view the color orange on the top of the node).

    If they eat the cycles in the UI thread, they may not leave enough cycles to LabVIEW to make updates to the user interface of the front panel.

    What make these 3 part of the dll?  They need to run in the UI thread?  Is there a problem with the standby so that the DLLs are not pounding the UI thread?

Maybe you are looking for