The IPACT Queuer and Router Services (IQR) provides a
standard Application Programming Interface (API) for sending messages.
By using IQR, application programmers are relieved from trying to develop
messaging methods between applications on the same node or multiple nodes.
IQR provides delivery, recovery, and connectivity between
multiple nodes using a router installed over DECnet or TCP/IP. IQR
services are provided that allow for the addition of user supplied routers to
alternate networks. IPACT has a library of other routers written for
process control devices, SNA, and other networks.
A link library is provided that interfaces the Manufacturing
Automation Queuing and Routing Software (available from DECUS).
The need to deliver transactions and events reliably between
different computer systems have been identified for most process control
computer systems. DECnet does not guarantee the delivery of messages at
the application layer. The IQR router and IQR services provide this end
to end delivery guarantee. The use of these two mechanisms provides the
ability to deliver information from one computer system to another in
applications where such guarantees are required (e.g. the MES environment).
Messages are not deleted or lost until the receiving process acknowledges the
message. This can be thought of in a similar manner as a database
"commit".
The IQR software is designed to provide guaranteed message
delivery between two different locations. This is done by creating a
messaging hub which contains message queues. Each message
queue contains actual messages to be read. Also, the IQR software
provides a router which will move a message from one hub to
another (even across different nodes).
You are welcome to download the IQR documentation.
It is in a .PDF format.
The IPACT Queuer and Router Services currently supports the
AXP/Open VMS v6.1 and higher operating system.
A hub is an individual "container" that holds
all the information required for a group of message queues and their
respective messages.
Each hub is created by using the IQU utility. When
created, the hub occupies both system memory and a disk container file.
System memory is used to store general hub information, as well as non-journaled
message queues. The container file holds a backup of hub information and journaled
message queues.
All hubs can contain a pre-defined number of message
queues, either journaled or non-journaled. The hub is created
in protected memory, so as to not allow someone to accidentally
"damage" its information.
Within any hub are usually many message queues. A message
queue has a number of properties that all can be defined by the process
creating a message queue. Message queues are created by using the IQU
utility or by using the IQR System Service.
Messages are written to a message queue using utilities
(like QIT), system service routines, or from another hub via the router.
Messages are then read from a message queue using utilities (like DQIT),
system service routines, or sent to another hub via the router.
All message queues are remembered between system startups.
There is no need to create the queues after each startup as they will exist
when the hub is re-installed using the IQU utility (see Utility Chapter).
The characteristics of each message queue is also maintained over a system
startup for all message queues.
The following is a list of properties that can be defined
for any message queue:
Properties |
Description |
Name |
All message queues have a
name that consists of up to 16 characters. No two message queues in a
hub can have the same name. |
Size |
Messages written to a
message queue can be of many varying sizes. Each message queue can
specify the size (in bytes) of the largest message that can be written
to it. |
Location |
A message queue can be
either journaled or non-journaled. Journaled message queues are saved
in a disk file and are recoverable after abnormal events like a system
crash. Non-journaled message queues are stored in memory and offer a
speed advantage over journaled message queues, but are not recoverable
in the event of a system shutdown. |
Volatility |
Message queues can be
created so that messages written to it are volatile. A volatile
message always has the possibility of being lost in the event that the
message queue has run out of room and requires more space to write a
new message. In this case, the oldest message is deleted from the
message queue. |
Number of Messages |
A message queue can be
specified to hold only a certain number of messages at any one time,
regardless of the size of the actual message. An example would be a
volatile message queue that can hold only two messages at a time. Any
time a message is written to it that would exceed the two message
limit, the oldest message is deleted. |
Acknowledgment |
All messages must be
acknowledged from a message queue after being read. Acknowledging a
message indicates to the queue that the receiver has properly received
the message, and the message queue is now clear to delete the message
from the queue. Acknowledgment is usually done by the user; however,
it can be set up to be done automatically after a message is first
read. |
Number of Readers |
To read a message from a
message queue, you must first connect to it and declare yourself as a
reader. A message queue can only have one or two readers connected to
it at a time. The number of readers allowed is defined at the time the
message queue is created. If more readers try to connect than are
allowed, an error is returned. The first reader to connect is the
Primary Reader and the second reader to connect is the Secondary
Reader. |
Stale Messages |
Message queues can be set
up to have stale messages. A message becomes stale when it exists on a
queue for longer than a preset amount of time. After a message becomes
stale, it is deleted from the queue (without a chance to be read). |
Replication |
Some message queues can
be created to replicate any message written to it to other message
queues within its hub. This can aid in the ability to perform just one
write to a message queue that in turn will automatically write the
message to up to four other message queues. This process is called
replicating. Messages are never actually written to a replicating
message queue; therefore readers are not allowed to connect to this
kind of queue. |
Within each message queue are its contained messages. Each
message is stored in FIFO (first in, first out) order. All messages
will remain in the queue until one of the following conditions is met:
| A reader acknowledges a message |
| A process requests to delete a message |
| A message becomes stale |
| A volatile message queue runs out of space. |
Messages are not stored in any particular format. It
is up to the writer/reader of the messages to interpret the actual message
being passed. It is important to remember that all messages that are
read must be acknowledged. If a read message is never acknowledged, the
reading process will not be able to read another message until it
acknowledges the current one. If, however, the process would
abnormally exit and never acknowledge the message, the read message is again
placed at the front of the queue. This will insure that a process will
properly read each message.
The IQR Router is responsible for routing messages from
message queues in a particular hub to other hubs or remote nodes.
Currently, only the DECnettransport is supported. DECnet and TCP/IP
Transporter are fully supported. The remote nodes may be any DECnet
compatible node that supports the IQR Router protocol (to include routers of
the MAQ/MQD and IMS type).
The interface to the IQR software is through an Application
Programming Interface (API). This API is written as an user
written system service and is installed with protected privileges. The
system service allows the ability of the IQR software to protect the files,
shared regions, and access methods from errant user programs. All of the
data structures are protected in either executive or kernel mode. The
following is a list of the common services provided. The IQR
System Service Library Descriptions chapter gives a more complete
description of the system service calls including those typically only used by
the IQR router and the IQR utilities.
| IQR_ACK_READ - Acknowledge a message read from a
message queue |
| IQR_ATTACH_H - Attach to a hub |
| IQR_BACKUP_RNA - Negative acknowledgment of a
message from a message queue |
| IQR_CONNECT_READ - Connect to a message queue with
intent to read |
| IQR_CONNECT_WRITE - Connect to a message queue
with intent to write |
| IQR_READ_Q - Read a message from a message queue |
| IQR_READ_QW - Read or wait for a message from a
message queue |
| IQR_WRITE_Q - Write a message to a message queue |
When a VMS process writes a message to a message queue, the
IQR services determine if and where the message can be queued. This
determination depends on how the message queue was defined. If
successful, the message will be placed in region or hub container file
depending if the message queue is journaled or not. The reader process
reads the message, processes the message, and then acknowledges the message
from the message queue. Until the message is acknowledged the message is
not deleted.
For more information regarding this or other IPACT products,
please see our Information Request Form.
BACK TO TOP
|