mq fundamentals 101228114012 phpapp02
TRANSCRIPT
Fundamentals of Websphere MQ Series
Agenda Websphere MQ Introduction Websphere MQ Objects Websphere MQ Administration Basics Hands-on part 1 Distributed MQ
Websphere MQ Clusters Hands-on part 2 Websphere MQ Programming Basics Hands-on part 3
Introduction
Messaging and Queuing Telephone answering machine Punched Cards and processing Clerical Data Input and processing Information Management Systems (IMS) Customer Information Control System (CICS) Telecommunications Access Methods (TCAM)
Virtual Telecommunications Access Method
Messaging and Queuing Messaging is
an availability adaptation technique used for the transfer of information between two entities without regard for the immediate availability and accessibility of either
Queuing a time adaptation technique user for saving information
until the intended message receiver is ready to receive it
Messaging and queuing is both asynchronous and connection less
Note: entities can be program, persons, systems etc
Requirements Distributed applications and systems Increase in program to program communication Heterogeneous Platforms Multiple communication protocols Maximize resource utilization Development complexity and resource skill set
Websphere MQ (MQ Series until '02) IBM middleware for messaging & queuing Launched on MVS/ESA in 1992 Currently available on all major platforms
Windows UNIX (AIX\Linux\Sun Solaris, HP-UX) AS/400 Z/OS
Common API (MQI) on all platforms Supports multiple programming languages
C, C++, JAVA, VB, COBOL,PL/1,Assembler Supports JMS standard APIs for messaging
MQ Objects
MQ Message String of bytes meaningful to the entity using it. Two parts to MQ messages Application Data
Content and structure defined and understood by the application program
Message Descriptor Contains control information like type of message and
priority which are understood and used by MQ Default length is 4 MB; the max length is 100 MB Length can be restricted by the definition of MQ
objects and the system storage Messages can be segmented or grouped
MQ Messages Message Types (Functional)
Datagram Request Reply Report
Message Retention Types Persistent Non-persistent
MQ Message Descriptor Version Message ID/Correlation ID Persistent/Non persistent Priority Date and time Life time of a message Coded Character Set Id Format Sender application and type Report options/Feedback Back out counter Segmentation/Grouping information
MQ Object Types Queue manager Queue Process Definitions Channels Name lists System Default Objects Clusters Authentication Information Objects
MQ Object Names Up to 48 characters for all objects except channels Up to 20 characters for channels
Uppercase A- Z Lowercase a - z Numerics 0 - 9 Period (.) Underscore (_) Forward slash (/)* Percent sign (%)*
Blanks are not allowed
* - If used, names should be enclosed in double quotes since these are special characters
Managing MQ Objects Control commands typed in through key board. MQSC commands through key board or from files Programmable Command Format (PCF) Messages MQ Administration Interface (MQAI) call from a
program MQ Explorer snap-in and MQ services snap-in
running under Microsoft management Console*
* - Applicable to Windows platform only
Message Queue Manager (MQM) Manages queues of messages for applications Provides application programming interface MQI Uses existing network facilities to transfer
messages Coordinates database and queue data updates Segments messages and assembles them Allows message grouping and disassembling Can send message to more than one destination Provides administrative functions on objects Special events like triggers and instrumentation
events are generated
MQ Queues For Applications Local Queues Remote Queues Alias Queues Model Queues Dynamic Queues
Used by MQ Initiation Queues Transmission Queues Cluster Transmission
Queues Dead-letter Queues Command Queues Reply-to queues Event Queues
Process definition Defines an application that starts in response to a
trigger Attributes include application type, application ID
(path) and data specific to the application
Channels Logical communication link Communication path from one MQM to another Used to move messages between MQMs Shields applications from underlying protocols Message Channels connects two MQMs
Uses Message Channel Agents (MCA) Unidirectional Requires a sender, receiver channels and a protocol
MQI Channels connects MQ client to server Bidirectional Used for MQ calls and responses only
Namelist Contains a list of MQ objects; queue, cluster,
authinfo Typically used by trigger monitors to identify a
group of queues Used in clustered environment to inform the
availability of an MQ object to clusters Maintained independent of application and can be
modified without stopping it Multiple applications can use a Namelist
MQ Overview1
MQ Overview
MQ Client
Application MQPUT
MQI Channel
MQ Server (MQM1)
MQI Channel
Sender Channel
Remote Q
MQ Server (MQM2)
Receiver Channel
Local Q
Putting Together1
System Default Objects
System Default Objects
System Default Objects
Basic MQ Administration
Basic Administration* Define MQ Objects Display MQ Objects Alter MQ Objects Delete MQ Objects Miscellaneous
* - Control Commands and MQSC Commands
MQM Administration Create MQ Manager CRTMQM e.g. CRTMQM /q TESTQMGR /q – sets the MQM as default Start MQ Manager STRMQM e.g. STRMQM TESTQMGR Stop MQ Manager ENDMQM e.g. ENDMQM TESTQMGR Delete MQ Manager DLTMQM e.g. ENDMQM TESTQMGR
MQM Administration Stop MQ Manager ENDMQM Options
By default MQM is quiesced and so takes time -c to notifies all applications to stop but doesn't
wait for MQM to end -c is same as issuing ENDMQM with no options -w waits until apps stop and MQM ends -i immediate and doesn't wait for apps to
disconnect -p pre-emptive and should be used with caution
Managing MQM Objects MQSC Commands by running RUNMQSC
Verify a command without running it Run a command on a local queue manager Run a command on a remote queue manager
To display MQM properties STRMQM TESTQMGR (if not started already) RUNMQSC or RUNMQSC TESTQMGR display QMGR (MQSC Command) END
RUNMQSC can accept commands through key board or from a file RUNMQSC < command.in > execution.out
Managing Queues Create a local queue
DEFINE QLOCAL(TEST.LOCAL.QUEUE) Display a local queue
DISPLAY QLOCAL(TEST.LOCAL.QUEUE) Alter a local queue
ALTER QLOCAL(TEST.LOCAL.QUEUE) + GET(DISABLED)
Delete a local queue DELETE QLOCAL(TEST.LOCAL.QUEUE) PURGE
Managing Trigger Processes Create a Process
DEFINE PROCESS(PROC1) REPLACE + DESCR('test proc') APPLTYPE(WINDOWS)+ APPLICID('c:\test\prog.exe') Display a Process
DISPLAY PROCESS(PROC1) Alter a Process
ALTER PROCESS(PROC1)USERDATA('12') Delete a Process
DELETE PROCESS(PROC1)
Enabling Triggers Enabling trigger in a queue
DEFINE QLOCAL(TEST.LOCAL.QUEUE)REPLACE + TRIGGER TRIGTYPE(first)PROCESS(PROC1)+ INITQ(SYSTEM.DEFAULT.INITIATION.QUEUE) Trigger Types
every first N messages
Managing Channels Create a Channel
DEFINE CHANNEL(MQMA.MQMB)CHLTYPE(sdr)+ XMITQ(MQMB) TRPTYPE(tcp)+ CONNAME(SERVER1.XYZ.COM) Display a Channel
DISPLAY CHANNEL(MQMA.MQMB) Alter a Channel
ALTER CHANNEL(MQMA.MQMB)+ CONNAME(SERVER2.XYZ.COM)
Delete a Channel DELETE CHANNEL(MQMA.MQMB)
Managing Namelist Create a Namelist
DEFINE NAMELIST(CLUSTERNL)+ NAMES(CLUSA,CLUSB)+ NLTYPE(CLUSTER)REPLACE Display a Namelist
DISPLAY NAMELIST(CLUSTERNL) Alter a Namelist
DEFINE NAMELIST(CLUSTERNL)+ NAMES(CLUSA,CLUSB,CLUSC)+ NLTYPE(CLUSTER) Delete a Namelist
DELETE NAMELIST(CLUSTERNL)
Hands-on Part 1 MQ Administration
Distributed MQ
Distributed MQ
Transferring messages between Queue Managers Queue Managers can be on the same machine or
world apart Queue Managers can be on the same platform or
hetrogenous platforms Implemented using Distributed Queue Management
(DQM) features of MQ including MQ Clusters
Distributed MQ Components
Local and remote Queue Managers and queues Local is one to which an application is connected
Remote queue definition Local definition of a queue in a remote MQM
Transmission Queues Special local queue to store message temporarily
before transmitting to remote destination Message channel agents (MCA)
Software that handles sending and receiving Channels
One way communication link between MQMs
Distributed MQ Components
Dead letter queue Special queue to store undelivered messages
Transport Service Communication protocol independent of MQ MQ supports multiple protocols Platform dependent
Channel Initiators and Listeners Initiators are trigger monitors for sender channels Listeners start receiver channels on receiving
request from the sender MCA Channel Exit Programs
Used for additional processing like encryption [email protected]
Distributed MQ Components
M
C
A
M
C
A
M
C
A
M
C
A
Channel
Channel Transport
Service (TCP)
Transport Service (TCP)
App Q
App Q
App Q
App Q
App Q
XMIT Q
XMIT Q XMIT Q
QM1 QM2
Channel Initiator Listener
Init Q
Sample DQM Definition On QMA Define QREMOTE(Q1)+ RNAME(Q1)+ RQMNAME(QMB)+ XMITQ(QMB)
DEFINE QLOCAL(QMB)+ USAGE(XMITQ)
DEFINE CHANNEL(A.B)+ CHLTYPE(sdr)+ XMITQ(QMB)+ TRPTYPE(tcp)+ CONNAME(SERVERB.COM)
DEFINE QLOCAL(Q2) DEFINE CHANNEL(B.A)+ CHLTYPE(rcvr)+ TRPTYPE(tcp)
On QMB DEFINE QLOCAL(Q1) DEFINE CHANNEL(A.B)+ CHLTYPE(rcvr)+ TRPTYPE(tcp)
Define QREMOTE(Q2)+ RNAME(Q2)+ RQMNAME(QMA)+ XMITQ(QMA)
DEFINE QLOCAL(QMA)+ USAGE(XMITQ)
DEFINE CHANNEL(B.A)+ CHLTYPE(sdr)+ XMITQ(QMA)+ TRPTYPE(tcp)+ CONNAME(SERVERA.COM)
Channel Types & Combinations Channel Types Sender Receiver Server Requester Cluster Sender Cluster Receiver
Valid Combinations Sender - Receiver Requester - Server Requester - Sender Server - Receiver Cluster Sender –
Cluster Receiver
Queue Addressing & Aliases
Queue Name + Queue Manager Name + Transmission Queue (if remote queue)
Remote Queue Definition Resolves the remote queue location
Queue Manager Alias Definition Specifies alternative names for the message
descriptor of a “send” message Reply-to Queue Alias Definition
Specifies alternative names for the reply information in the message descriptor
Aliases are characterized by a blank RNAME in the remote queue definition
Remote Queue Definition
Remote Queue Definition - Define QREMOTE(Q1)RNAME(Q1)+ RQMNAME(QMB)XMITQ(QMB)
Resolves the remote queue address using the remote queue manager, remote queue name and the transmission queue
If the transmission queue is not specified, a transmission queue with the name of the remote queue manager will be used
If not available, the default transmission queue of the queue manager will be used
Queue Manager Alias
Queue Manager Alias - Define QREMOTE(QMB_Test)RNAME()+ RQMNAME(QMB)
- Define QREMOTE(QMB_Test)RNAME()+ RQMNAME(QMB)XMITQ(QMC)
Messages with MQM QMB_Test in the descriptor will be modified to QMB before being forwarded
XMITQ parameter can be used to steer the message to use a specified channel
If transmission queue is not specified, the logic detailed in the previous slide will be used
Reply-to Queue Alias
Can be used to alter the reply-to queue and queue manager without changing the application
At the sender queue manager - Define QREMOTE(QMA_Reply) + RNAME(Answer_QMA)RQMNAME(QMA_Return)
- Define QREMOTE(QMA_Return)RNAME()+ RQMNAME(QMA)
In “PUT” call leave the “reply to queue manager” blank and set the queue name to QMA_Reply
At the replying queue manager - Define QLOCAL(QMA_Return)USAGE(XMITQ)
Reaching Remote Queue Managers
Point to point Multi-hopping Using shared channels Using multiple channels Using MQ clusters
DMQ Commands
Start Channel Initiators RUNMQCHI -q IQ (Control Command) START CHINIT INITQ(IQ) (MQSC Command)
Stopping Channel Initiators Alter the init queue to disable GET from queue
Start MQM Listeners RUNMQLSR -t TCP -m MQM-p 1414 (control Command)*
START LISTENER IPADDR(X.X.X.X) PORT(nnnn) TRPTYPE(tcp) (MQSC Command)
*-This requires editing of /etc/services and /etc/inetd.conf files to add MQSeries 1414/tcp #MQ Listener MQSeries stream tcp nowait mqm /usr/mqm/bin/amqcrsta -q mqm.name
DMQ Commands
Stop MQM Listeners ENDMQLSR -m MQM (control Command) STOP LISTENER IPADDR(X.X.X.X) PORT(nnnn) TRPTYPE(tcp) (MQSC Command)
Start MQ Channel RUNMQCHL -c CHANNEL -m QM (Control Command) START CHANNEL(channel-name) (MQSC Command)
Stop MQ Channel STOP CHANNEL(channel-name) (MQSC Command)
Display MQ Channel Status DISPLAY CHSTATUS(channel-name) (MQSC Command)
MQ Clusters
DQM vs Clusters DQM Components Local MQM Remote Q definition Xmit Q definition Sender Channel
Remote MQM Local Q Receiver Channel Listener
Cluster Definitions Local MQM Cluster receiver channl Cluster sender channel
Remote MQM Cluster receiver channl Cluster sender channel
Cluster Advantages
Reduced system administration due to reduced number of definitions
Increased availability and scalability due to easy administration and multiple instances of queues
Work load balancing using multiple instances of queues
Cluster Component Details MQ Cluster is a network of logically related MQMs
and need to be unique in an enterprise Cluster Queue Manager is a MQM that is a
member of a MQ Cluster and should be unique in the cluster
Cluster Queue is a queue hosted in a cluster queue manager and is available to all MQM in a cluster
Repository is a collection of information about the queue managers that are part of a cluster
Full Repository is one which stores a complete set of information about all MQMs in the cluster
Partial Repository is one which stores information which is required to deal with interested MQMs
Cluster Component Details Repository Queue manager is a cluster queue
manager which stores a full repository SYSTEM.CLUSTER.REPOSITORY.QUEUE
Cluster Receiver Channel is the receiving end of a channel on which cluster MQMs can receive messages from other MQMs in the cluster
Cluster Sender Channel is the sending end of a channel on which cluster MQMs can send cluster information to one of the full repositories
Cluster Transmission Queue transmits all messages from a cluster MQM to any MQM in the cluster SYSTEM.CLUSTER.TRANSMIT.QUEUE
Command Queue is used to make requests and get responses from full repositories
Clustered MQ Components
Cluster Receiver Channel
Cluster Receiver Channel Transport
Service (TCP)
Transport Service (TCP)
App Q App Q
App Q1
App Q
App Q1
XMIT Q
QM1 QM2
Full Repository
Full Repository
Cluster Sender Channel
Cluster - CLUA
XMIT Q XMIT Q
XMIT Q
Cluster Definition On QM1 RUNMQSC ALTER QMGR REPOS(CLUA) DEFINE CHANNEL(TO.QM1)+ CHLTYPE(CLUSRCVR)+ TRPTYPE(tcp)+ CONNAME(QM1.COM)+ CLUSTER(CLUA) DEFINE CHANNEL(TO.QM2)+ CHLTYPE(CLUSSDR)+ TRPTYPE(tcp)+ CONNAME(QM2.COM)+ CLUSTER(CLUA) DEFINE QLOCAL(Q1)+ CLUSTER(CLUA)
On QM2 RUNMQSC ALTER QMGR REPOS(CLUA) DEFINE CHANNEL(TO.QM2)+ CHLTYPE(CLUSRCVR)+ TRPTYPE(tcp)+ CONNAME(QM1.COM)+ CLUSTER(CLUA) DEFINE CHANNEL(TO.QM1)+ CHLTYPE(CLUSSDR)+ TRPTYPE(tcp)+ CONNAME(QM1.COM)+ CLUSTER(CLUA) DEFINE QLOCAL(Q)+ CLUSTER(CLUA)
Adding new QM (QM3) to Cluster RUNMQSC DEFINE CHANNEL(TO.QM3)+ CHLTYPE(CLUSRCVR)+ TRPTYPE(tcp)+ CONNAME(QM3.COM)+ CLUSTER(CLUA) DEFINE CHANNEL(TO.QM1)+ CHLTYPE(CLUSSDR)+ TRPTYPE(tcp)+ CONNAME(QM1.COM)+ CLUSTER(CLUA)
Note: QM3 doesn't store a full repository and points to QM1 repository
Adding new QM on DHCP to Cluster RUNMQSC DEFINE CHANNEL(TO.QM3)+ CHLTYPE(CLUSRCVR)+ TRPTYPE(tcp)+ CONNAME('')+ CLUSTER(CLUA) DEFINE CHANNEL(TO.+QMNAME+)+ CHLTYPE(CLUSSDR)+ TRPTYPE(tcp)+ CONNAME(QM2.COM)+ CLUSTER(CLUA)
Note: the channel definition TO.+QMNAME+ will be replaced by TO.QM2
Verifying a Cluster Each MQM require a channel initiator to monitor
the system defined init Q SYSTEM.CHANNEL.INITQ START CHINIT
Each MQM require a channel listener to listen to incoming network requests START LISTENER PORT(1414)+ TRPTYPE(TCP)
Verify all the available MQMs in the cluster DISPLAY CLUSQMGR(*)
Verify all the channel statuses DISPLAY CHSTATUS(*)
Load Balancing Using Cluster Define the same queue in multiple queue managers
in the cluster MQ series will use the default algorithm (round
robin) to identify MQM and transfer message Default algorithm can be changed using the cluster
workload user exit
Hands-on Part 2 Creating MQ Clusters
MQ Programming
Messaging and Queuing Patterns One to one One to many Many to one Publish/Subscribe Request/reply One-way datagram or send-and-forget
One to One Pattern 1
One to Many Pattern 1
Many to One Pattern 1
Publish/Subscribe Pattern 1
Request/Reply Pattern 1
Send and Forget Pattern1 (Datagram)
Transaction Management ACID unit of work Single phase commit Two phase commit with XA specification
compliant resource managers BackoutCount and BackoutThreshold attributes to
avoid looping
Message Queuing Interface (MQI)
MQI Data Structures
MQ Programming Sequence
MQCONN
MQOPEN
BASIC OP
MQCLOSE
MQDISC
Connect to MQM
Open MQ Objects
Perform n operations
Close MQ Objects
Disconnect from MQM
MQ JAVA Programming
JAVA Programming Environment Required jar file
com.ibm.mq.jar Normally found in the MQ installation directory
Environment variable set-up Add com.ibm.mq.jar to the classpath CLASSPATH=install_dir\lib\com.ibm.mq.jar install_dir is platform dependent
Import required package in the code Import com.ibm.mq.*;
MQ Series JAVA Classes MQEnvironment
Contains the static variables that control the environment in which a MQQueueManager is constructed
MQQueueManager Represents the MQ series queue manager
MQQueue Provides inquiry, set,put,get operations for queues
MQMessage Represents the descriptor and data of a MQ message
MQPutOptions Contains options which control MQQueue.put() method
MQGetOptions Contains options which control MQQueue.get() method
MQException Contains completion codes and error code constants
Setting up the Connection MQEnvironment.hostname=“TEST.SERVER.COM” MQEnvironment.channel=“TEST.CLIENT.CHNL” MQEnvironment.port=1638 MQEnvironment.userId=”userABC” MQEnvironment.password=”password” MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES)
MQQueueManager qMgr = new MQQueueManager(“TEST”);
Interacting with Queues - Put Int openOptions = MQC.MQOO_OUTPUT|MQC.MQOO_FAIL_IF_QUIESCING;
MQQueue queue = qMgr.accessQueue(“TestQ”,openOptions);
MQPutMessageOptions pmo = new MQPutMessageOptions();
MQMessage outMsg = new MQMessage(); outMsg.format = MQC.MQFMT_STRING; String msgString = “Test message”; outMsg.writeString(msgString); queue.put(outMsg,pmo);
Interacting with Queues - Get Int openOptions = MQC.MQOO_INPUT_SHARED|MQC.MQOO_FAIL_IF_QUIESCING;
MQQueue queue = qMgr.accessQueue(“TestQ”,openOptions);
MQGetMessageOptions gmo = new MQGetMessageOptions();
gmo.options = gmo.options + MQC.MQGMO_SYNCPOINT;
gmo.options = gmo.options + MQC.MQGMO_WAIT;
gmo.waitInterval = 3000; MQMessage inMsg = new MQMessage(); queue.put(inMsg,gmo);
Closing the Connection qMgr.commit(); queue.close(); qMgr.disconnect();
Hands-on Part 3 MQ Programming