Initiation queues are the internal inbox for IBM MQ triggering. When a work queue with triggering enabled meets your rules—first message arrival, every message, or depth threshold—the queue manager does not call your application directly. It writes a trigger message to an initiation queue. The trigger monitor process reads that queue and starts the program named in the associated PROCESS definition. Beginners confuse initiation queues with application work queues; understanding the split is essential for batch mainframe jobs, triggered UNIX daemons, and any design that avoids polling empty queues. This page defines initiation queues, links them to INITQ and PROCESS, covers defaults and custom names, and walks through troubleshooting when triggers stop firing.
Like transmission queues and dead letter queues, an initiation queue is defined with DEFINE QLOCAL and USAGE(NORMAL). There is no special USAGE value for “initiation”—the role comes from how the queue manager and trigger monitor use it. Typical attributes include MAXDEPTH sufficient for burst trigger events, DEFPSIST per your policy (trigger messages are usually short-lived), and authority limited so applications cannot PUT business data there. DISPLAY QLOCAL shows the queue; DISPLAY QSTATUS shows whether trigger messages are backing up.
| Attribute | Role |
|---|---|
| TRIGGER | ENABLED / DISABLED / FIRST / EVERY / DEPTH |
| TRIGTYPE | FIRST, EVERY, DEPTH, or NONE |
| TRIGDPTH | Depth threshold when TRIGTYPE is DEPTH |
| INITQ | Name of initiation queue for trigger msgs |
| PROCESS | PROCESS object defining program to start |
| TRIGDATA | User data passed to started application |
If INITQ is not specified on a triggered queue, many environments default to SYSTEM.DEFAULT.INITIATION.QUEUE. Verify it exists with DISPLAY QLOCAL. High-volume estates sometimes define INITQ per application family—PAYMENTS.INITQ, BATCH.INITQ—so one stuck trigger monitor backlog does not block unrelated systems. Each initiation queue needs exactly one active trigger monitor attention path per queue manager design; consult IBM documentation for multi-instance queue manager trigger behavior on your release.
12345678910111213DEFINE QLOCAL('PAYMENTS.INITQ') REPLACE + MAXDEPTH(10000) DEFPSIST(NO) + GET(ENABLED) PUT(ENABLED) + DESCR('Initiation queue - Payments triggers') DEFINE QLOCAL('PAYMENTS.IN') REPLACE + TRIGGER(FIRST) TRIGTYPE(FIRST) + INITQ('PAYMENTS.INITQ') + PROCESS('PAYPROC') + MAXDEPTH(500000) DEFPSIST(YES) DEFINE PROCESS('PAYPROC') REPLACE + APPLICID('payconsumer') USERDATA('region=eu') DISPLAY QLOCAL('PAYMENTS.IN') TRIGGER INITQ PROCESS DISPLAY QLOCAL('PAYMENTS.INITQ') CURDEPTH
TRIGGER(FIRST) with TRIGTYPE(FIRST) starts one instance when the queue goes from empty to having messages—classic batch wake-up. TRIGTYPE(DEPTH) with TRIGDPTH(100) can start additional workers when backlog grows. TRIGTYPE(EVERY) can start a process per message—dangerous at high rate; use only when startup cost is tiny and platform limits allow. PROCESS must exist and APPLICID must be executable by the queue manager service account on your OS.
Trigger messages are special—they carry which queue triggered, trigger type, and optional trigger data from TRIGDATA on the queue or USERDATA on PROCESS. The started application uses this to open the correct work queue. Application code paths differ by language; mainframe COBOL samples often parse trigger parameters from the environment IBM provides on start. Read your platform programming guide for exact structure names and lengths.
| Aspect | Initiation queue | Work queue |
|---|---|---|
| Message source | Queue manager (trigger) | Applications |
| Message content | Trigger control data | Business payloads |
| Consumer | Trigger monitor | Your application |
| Configured with | DEFINE QLOCAL only | TRIGGER, PROCESS, INITQ |
Modern Java applications often use JMS Message Driven Beans or .NET listeners instead of classic MQ triggering. Conceptually both react to messages arriving without polling loops. Initiation queues remain important on z/OS and distributed batch where PROCESS triggering is entrenched. Architects choose triggering when they want the queue manager to spawn OS processes; listeners when the app server manages threads.
The work queue is the pile of homework. When homework appears, a bell rings in the teacher's office (initiation queue). The teacher (trigger monitor) hears the bell and tells a helper (your program) to go grade the pile. You do not put homework in the teacher's bell box—that box is only for bell signals.
List objects and attributes needed to trigger on first message to ORDERS.IN.
Initiation queue CURDEPTH is high but work queue also has messages. Name three checks.
When would you use a dedicated INITQ per application family?
1. Trigger messages are written to:
2. Who reads the initiation queue?
3. INITQ on QLOCAL specifies:
4. Default initiation queue name is often: