You are on page 1of 15

Oracle

Advanced Queuing
Naresh Kumar Y

Agenda

Introduction
Environment setup
Packages to manage AQs
Payload
Queue table
Create Queue
Grant privileges
Message properties
Enqeue options
Enqueue message
Deqeue options
Dequeue message

Introduction

Exchanging messages and


communicating between two or more
different application modules

Environment setup

Administration and access privileges


for advanced queuing are controlled
using the below two roles
AQ_ADMINISTRATOR_ROLE - Allows
creation and administration of queuing
infrastructure.
AQ_USER_ROLE - Allows access to
queues for enqueue and dequeue
operations.

Packages to manage AQs

DBMS_AQADM - To perform below


Admin operations like creating
queue, queue tables, stop queue,
drop queue etc.
DBMS_AQ - To manage the Queues
like enqueue, dequeue etc.

Payload

AQ handles messages known as


payloads.
The format and structure of the
messages are designed by payload
Payload type can be either userdefined objects , xml type, ANYDATA,
RAW.

Queue table

Queue table store the queue information


We can create multiple queues for the
single queue table
Create queue table using the DBMS_AQ
package.
Example ::
DBMS_AQADM.create_queue_table
(queue_table
=>
'xx_event_queue_tbl',
queue_payload_type
=> 'customer_msg'
);

Create queue
Create and start queue using DBMS_AQ
package.
Example ::
DBMS_AQADM.create_queue (queue_name
=> XX_CUSTOMER_Q',
queue_table
=> 'xx_event_queue_tbl'
);
DBMS_AQADM.start_queue
(queue_name => XX_CUSTOMER_Q',
enqueue => TRUE);

Grant privileges
After creating and starting queue, we need
to give grants to user schema to manage
the queues.
Example
DBMS_AQADM.grant_queue_privilege
( privilege => 'ALL',
queue_name => 'aq_admin.event_queue',
grantee => 'aq_user
);

Message Properties

Before enqueue a message, We must


create and set the properties of
message by using the below record
type
DBMS_AQ.message_properties_t;

Message Properties(Contd.)

message_properties_tTYPE
message_properties_t IS RECORD (
priority BINARY_INTEGER DEFAULT 1,
delay BINARY_INTEGER DEFAULT NO_delay,
expiration BINARY_INTEGER DEFAULT NEVER,
correlation VARCHAR2(128) DEFAULT NULL,
attempts BINARY_INTEGER,
recipient_list aq$_recipient_list_t,
exception_queue VARCHAR2(51) DEFAULT NULL,
enqueue_time DATE,
state BINARY_INTEGER,
sender_id aq$_agent DEFAULT NULL,
original_msgid RAW(16) DEFAULT NULL);
/

Enqeue options

enqueue_options_t TYPE
enqueue_options_t IS RECORD (
visibilityBINARY_INTEGER DEFAULT
ON_COMMIT,
relative_msgid RAW(16) DEFAULT NULL,
sequence_deviation BINARY_INTEGER
DEFAULT NULL,
transformation VARCHAR2(60) DEFAULT
NULL);
/

Enqueue message

After creating the queue, we can enqueue the


queue using DBMS_AQ
Example ::
DBMS_AQ.enqueue
(queue_name => 'AQADMIN.XX_CUSTOMER_Q',
enqueue_options => aq_enqueue_options,
message_properties
=>
aq_message_properties,
payload
=> aq_message,
msgid
=> raw_message_handle
);

Deqeue options

dequeue_options_t TYPE dequeue_options_t IS


RECORD (
consumer_name VARCHAR2(30) DEFAULT NULL,
dequeue_mode BINARY_INTEGER DEFAULT
REMOVE,
navigation BINARY_INTEGER DEFAULT
NEXT_MESSAGE,
visibility BINARY_INTEGER DEFAULT ON_COMMIT,
wait BINARY_INTEGER DEFAULT FOREVER,
msgid RAW(16) DEFAULT NULL,
correlation VARCHAR2(128) DEFAULT NULL,
deq_condition VARCHAR2(4000) DEFAULT NULL,
signature aq$_sig_prop DEFAULT NULL,
transformation VARCHAR2(60) DEFAULT NULL,
delivery_mode PLS_INTEGER DEFAULT
PERSISTENT);

Dequeue message

After Enqueue the message, We can dequue the


message.
Example ::
DBMS_AQ.dequeue
(queue_name => 'AQADMIN.XX_CUSTOMER_Q',
dequeue_options
=>
aq_dequeue_options,
message_properties
=>
aq_message_properties,
payload
=> aq_message,
msgid
=> raw_message_handle
);

You might also like