®
IBM Software Group
Enabling WebSphere MQ Traffic with
WebSphere DataPower - Use Case Scenarios
DataPower SOA Appliances Support
May 18, 2010
WebSphere® Support Technical Exchange
IBM Software Group
Agenda
MQ Traffic Patterns in DataPower
MQ Message Processing Mode
Use Case Scenarios
MQ Routing in DataPower
Trouble Shooting
Useful Links
Questions and Answers
WebSphere ® Support Technical Exchange 2 of 44
IBM Software Group
MQ Traffic Patterns in DataPower
DataPower’s Multi-Protocol Gateway Service (MPGW ) is used
to handle these traffic patterns
MQ <=> MQ (MQ in front & MQ in back)
MQ with Units-of-W ork (UoW )
MQ with SSL Channel
MQ <=> HTTP(S) (MQ in front & HTTP(s) in back)
HTTP(S) => MQ
MQ => HTTP(S)
MQ <=> JMS (MQ in front & JMS in back)
MQ <=> TIBCO EMS (MQ in front & TIBCO in back)
MQ <=> FTP(S) (MQ in front & FTP(S) in back)
WebSphere ® Support Technical Exchange 3 of 44
IBM Software Group
MQ Message Processing Mode
Datagram traffic using MPGW
Datagram with custom error handling
Datagram with distribution list
Datagram with transactionality
Request/Reply traffic using MPGW
Request/Reply with Dynamic Routing
Request/Reply with Model Queue
Request/Reply with transactionality
WebSphere ® Support Technical Exchange 4 of 44
IBM Software Group
Datagram Traffic using MPGW Service
Request Rule only, no Response Rule
May have Error Rule
Process Backend Errors is “off” under the advanced
tab of the Multi-Protocol Gateway (MPGW) Service
Request Type as “XML”, “SOAP”, “non-XML” or “pass-
thru”
Response Type as “pass-thru”
Request MQMD is not altered
Backside MQ URL only specifies the request queue
WebSphere ® Support Technical Exchange 5 of 44
IBM Software Group
Datagram with custom error processing
Request Rule and Response Rule
Must capture response code in response rule using
“dp:response-header('x-dp-response-code')” and use
“dp:reject” to invoke error rule if “response code” is
“2xxx”
“Process Backend Errors” is “on” under the advanced
tab of the MPGW
Must use “var://service/error-ignore = 1” in error rule to
handle ROLLBACK when units-of-work is enabled
WebSphere ® Support Technical Exchange 6 of 44
IBM Software Group
Datagram with distribution list
• Typical scenario when the same message is distributed to multiple
queues
• MQ Distribution Lists is an optimal way of fanning out messages
– Inject MQOD request header with multiple destinations
<MQOD>
<MQOR><ObjectName>Queue1</ObjectName></MQOR>
<MQOR><ObjectName>Queue2</ObjectName></MQOR>
<MQOR><ObjectName>Queue3</ObjectName></MQOR>
<MQOR><ObjectName>Queue4</ObjectName></MQOR>
</MQOD>
– And four separate calls become a single one. Performance will increase
significantly
– Inject MQOD headers for the backend MQ qmgr using DataPower’s
extension function <dp:set-request-header name=“’MQOD’”
value=“$mqodStr”/> in custom stylesheet or MPGW’s Header injection Tab
WebSphere ® Support Technical Exchange 7 of 44
IBM Software Group
Datagram with Transactionality (UoW)
On the front side of the MPGW service:
– Transactions are enabled when units-of-work
(UoW) is set to “1” on MQ QM object
– Both GET and PUT operations use the same
connection
– MQCOMIT performed only after successful PUT
– Front and backside use same Queue Manager
(qmgr) configured in the MQ QM object
WebSphere ® Support Technical Exchange 8 of 44
IBM Software Group
Datagram with UoW Continued..
On the backend MQ URL for the MPGW service:
– Transactions are enabled when MQ URL contains
“Transactional=true” parameter for Datagram traffic
– Transactions are enabled when MQ URL contains
“Sync=true;Transactional=true” parameters for Request/Reply
traffic
– MQCOMIT is performed immediately after PUT when MQ URL
contains “Sync=true” parameter
– Use Automatic Backout as “on” with Backout Threshold and
Backout Queue name in QM Object
– Set service variable “var://service/error-ignore” to “1” to handle
ROLLBACK in the error rule
WebSphere ® Support Technical Exchange 9 of 44
IBM Software Group
Request/Reply Traffic using MPGW
Request, Response and Error Rules
Must capture response code in response rule
using “dp:response-header('x-dp-response-code')”
and use “dp:reject” to invoke error rule if “response
code” is “2xxx”
“Process Backend Errors” should be “on” under
the advanced tab of the MPGW
Must use “var://service/error-ignore = 1” in error
rule to handle ROLLBACK if UoW is enabled
WebSphere ® Support Technical Exchange 10 of 44
IBM Software Group
Request/Reply Traffic with Dynamic Routing
Scenario 1: If MQMD.ReplyToQ value exists and
MQMD.ReplyToQMgr’s value is same as the qmgr
name configured in the MQ QM object
– Set DataPower’s internal header “ReplyToQ” to an empty string
using extension function <dp:set-response-header
name=“’ReplyToQ’” value=“’’”/> using stylesheet in both request
and response rules
– Save MQMD.ReplyToQ to a context variable in request rule
– Save MQMD.ReplyToQMgr to a context variable in request rule
– Inject MQOD headers with these values in the response rule for
the front side client
– Make sure the local qmgr is configured to handle message routing
to remote qmgr based on MQOD
WebSphere ® Support Technical Exchange 11 of 44
IBM Software Group
Request/Reply Traffic with Dynamic Routing Continued
Scenario 2: If MQMD.ReplyToQ value exists and
MQMD.ReplyToQMgr’s value is different than the qmgr
name configured in the MQ QM object
– Set DataPower’s internal header “ReplyToQ” to an empty string using
extension function <dp:set-response-header name=“’ReplyToQ’” value=“’’”/>
using stylesheet in both request and response rules
– Set DataPower’s internal header “ReplyToQM” to an empty string using
extension function <dp:set-response-header name=“’ReplyToQM’” value=“’’”/
> using stylesheet in both request and response rules
– Save MQMD.ReplyToQ to a context variable in request rule
– Save MQMD.ReplyToQMgr to a context variable in request rule
– Inject MQOD headers with these values in the response rule for the front
side client
– Make sure the local qmgr is configured to handle message routing to
remote qmgr based on MQOD
WebSphere ® Support Technical Exchange 12 of 44
IBM Software Group
Request/Reply Traffic with Model Queue
A model queue defines a set of queue attributes
that are used as a template for creating a dynamic
queue.
Dynamic queues are created by the queue
manager when an application issues an MQOPEN
request specifying a queue name that is the name
of a model queue.
The dynamic queue that is created in this way is a
local queue whose attributes are taken from the
model queue definition.
WebSphere ® Support Technical Exchange 13 of 44
IBM Software Group
Request/Reply Traffic with Model Queue Continued
The Backend MQ URL contains “Model=true”
parameter with model queue name as part of the
“ReplyQueue” tag
Example of MQ URL with “Model=true”
dpmq://MQ-AIX/?RequestQueue=Q1;ReplyQueue=MQ1;Model=true
Note: MQ1 is the name of the model queue defined
in qmgr
WebSphere ® Support Technical Exchange 14 of 44
IBM Software Group
Message delivery modes
DataPower supports 1-phase COMMIT
– The same MQ qmgr must be used in MQ front side
handlers and MQ URL openers
– All processing actions must be synchronous
– The same connection is shared across all MQ
operations within a transaction
– Guaranteed “once-and-only-once” message delivery
In all other cases it is “at-least-once” message
delivery, i.e. no message will ever be lost
WebSphere ® Support Technical Exchange 15 of 44
IBM Software Group
Message delivery modes Continued
Scenario 1: When same MQ qmgr is used in both front
side handler and back side MQ URL opener
– Message from Input Queue (GETQ) will be resent if
input connection fails. No duplicates in Output Queue
(PUTQ)
Scenario 2: When two separate MQ qmgrs are used in
front side handler and back side MQ URL opener
– Message from Input Queue (GETQ) will be resent if
input connection fails. Duplicate message may
appear in Output Queue (PUTQ). No message loss.
WebSphere ® Support Technical Exchange 16 of 44
IBM Software Group
Use Case Scenarios
Use Case 1:
Traffic pattern is MQ-to-MQRFH2
MPGW service with MQ as the front side handler,
creates MQRFH2 message and delivers the
message as datagram to the backend MQ qmgr
Units-of-work (UoW)
Same qmgr for both front side and back side
WebSphere ® Support Technical Exchange 17 of 44
IBM Software Group
Use Case-1 Configuration – QM Object
WebSphere ® Support Technical Exchange 18 of 44
IBM Software Group
Use Case-1: MQ Front Side Handler
WebSphere ® Support Technical Exchange 19 of 44
IBM Software Group
Use case-1: Example MQMD.Format
WebSphere ® Support Technical Exchange 20 of 44
IBM Software Group
Use Case-1: Example MQRFH2 Header
WebSphere ® Support Technical Exchange 21 of 44
IBM Software Group
Use Case-2: MQRFH2-to-MQ
MPGW service to process message
Front side handler receives MQRFH2 message
DataPower removes the MQRFH2 headers from
the front side
Suppress MQRFH2 header for the backend
Injects MQMD.Format header for the backend
Message is created for the backend MQ
UoW in the MQ QM Object
Same qmgr for both front and back sides
SSL Channel for the QM Object
WebSphere ® Support Technical Exchange 22 of 44
IBM Software Group
Use Case-2: Excludes headers from MQ FSH
WebSphere ® Support Technical Exchange 23 of 44
IBM Software Group
Use Case-2: Example Header Injection and Suppression
WebSphere ® Support Technical Exchange 24 of 44
IBM Software Group
Use Case 2: Configuring QM Object with SSL
Use of SSL Proxy Profile
Forward Crypto Profile instead of SSL Key Repository
Consistent approach with HTTPS configuration
No additional tooling to create SSL Key Repository
Ciphers MUST match MQ Server Queue Manager
Careful which Cipher is used if you have a choice
WebSphere ® Support Technical Exchange 25 of 44
IBM Software Group
Use Case 2: Configuring QM with SSL Continued..
WebSphere ® Support Technical Exchange 26 of 44
IBM Software Group
Use Case 2: SSL Identity and Validation Credentials
WebSphere ® Support Technical Exchange 27 of 44
IBM Software Group
MQ Routing: Complete MQMD Header Example
WebSphere ® Support Technical Exchange 28 of 44
IBM Software Group
MQ Routing: MQOD header Injection Example
MQOD headers used for Distributed MQ Queue
Manager (qmgr)
<xsl:variable name="newMQODStr">
<MQOD>
<Version>2</Version>
<ObjectName>CLIENT.REPLY.QUEUE</ObjectName>
<ObjectQMgrName>CLIENTQM</ObjectQMgrName >
</MQOD>
</xsl:variable>
<xsl:variable name="mqodStr">
<dp:serialize select="$newMQODStr"
omit-xml-decl="yes"/>
</xsl:variable>
<dp:set-request-header name="'MQOD'“
value="$mqodStr"/>
WebSphere ® Support Technical Exchange 29 of 44
IBM Software Group
MQ Routing: MQOD header Injection Example Continued
MQOD headers used for Cluster MQ Queue
Manager (qmgr)
<xsl:variable name=“clusMQODStr">
<MQOD>
<Version>2</Version>
<ObjectName>CLIENT.REPLY.QUEUE</ObjectName>
</MQOD>
</xsl:variable>
<xsl:variable name=“clus-mqodStr2">
<dp:serialize select="$clusMQODStr"
omit-xml-decl="yes"/>
</xsl:variable>
<dp:set-request-header name="'MQOD'“
value="$clus-mqodStr2"/>
Note: The qmgr is not included in MQOD for cluster MQ
environment
WebSphere ® Support Technical Exchange 30 of 44
IBM Software Group
MQ Routing: Use of Static and Dynamic URL
• Static MQ URL opener
– Using MQ Queue Manager configuration object
– URL uses dpmq:// prefix, like dpmq://QM?RequestQueue=... ,
where QM is the name of MQ QM configuration object
• Dynamic MQ URL opener
– Doesn't require statically defined MQ Queue Manager object
– URL is using mq:// prefix and has the following format
mq://host:port?QueueManager=<QM_NAME>....,
where QM_NAME is the name of MQ Queue Manager running on a
specific host and listening on a specific port
WebSphere ® Support Technical Exchange 31 of 44
IBM Software Group
Troubleshooting – DataPower Side
Enable log level to “debug” using trouble shooting
icon on the control panel
Enable probe for the particular MPGW service
Run few transactions and observe the system log
Look for MQ Reason Code(s) and errors in the
system log
Understand the MQ Reason Code(s) using MQ
supportpac “ma0k” available at
http://www-01.ibm.com/support/docview.wss?uid=swg24000652
MQ supportpac Link:
http://www-01.ibm.com/support/docview.wss?rs=977&uid=swg27007205
WebSphere ® Support Technical Exchange 32 of 44
IBM Software Group
Troubleshooting – MQ Server Side
MQ function
Access via: su – mqm
Display queue status
Processes – how many connections on get/put
Queue depth
Uncommitted messages present?
Queue Handles
• Who has open connections?
• Are those connections input or output?
WebSphere ® Support Technical Exchange 33 of 44
IBM Software Group
Summary
Traffic Patterns such as MQ-to-MQ, MQ-to-HTTP,
MQ-to-JMS, MQ-to-TIBCO and MQ-to-FTP were
discussed
MQ Message Processing Modes (Datagram,
Request/Reply and its variation with
transactionality were presented
Configurations involving use case scenarios for
MQ-to-MQ, MQ-to-MQRFH2 and MQRFH2-to-MQ
were discussed
WebSphere ® Support Technical Exchange 34 of 44
IBM Software Group
Summary Continued..
MQ Routing based on MQMD and MQOD
MQ Routing based on static and dynamic URLs
MQ SSL Channel configuration using SSL proxy
profile
Error Handling – Capturing “response code” in
response rule with “x-dp-response-code”
WebSphere ® Support Technical Exchange 35 of 44
IBM Software Group
Summary Continued..
Trouble Shooting Techniques
DataPower side trouble shooting
MQ server side “runmqsc” to check the Queue Status
for “IPPROCS”
Check Queue Status with Handles
• dis qs(qname) type(handles)
• dis qs(qname) type(handle) conname input output
WebSphere ® Support Technical Exchange 36 of 44
IBM Software Group
References
IBM® WebSphere DataPower SOA Appliances
webGUI Guide
IBM WebSphere DataPower SOA Appliances
Reference Guide
MQ Series Application Programming Reference
IBM WebSphere DataPower XSLT extension
elements, extension functions, and variables Guide
WebSphere ® Support Technical Exchange 37 of 44
IBM Software Group
Additional WebSphere Product Resources
Learn about upcoming WebSphere Support Technical Exchange webcasts, and access
previously recorded presentations at:
http://www.ibm.com/software/websphere/support/supp_tech.html
Discover the latest trends in WebSphere Technology and implementation, participate in
technically-focused briefings, webcasts and podcasts at:
http://www.ibm.com/developerworks/websphere/community/
Join the Global WebSphere User Group Community:
http://www.websphere.org
Access key product show-me demos and tutorials by visiting IBM Education Assistant:
http://www.ibm.com/software/info/education/assistant
View a webcast replay with step-by-step instructions for using the Service Request (SR)
tool for submitting problems electronically:
http://www.ibm.com/software/websphere/support/d2w.html
Sign up to receive weekly technical My Notifications emails:
http://www.ibm.com/software/support/einfo.html
WebSphere ® Support Technical Exchange 38 of 44
IBM Software Group
We Want to Hear From You!
Tell us about what you want to learn
Suggestions for future topics
Improvements and comments about our webcasts
We want to hear everything you have to say!
Please send your suggestions and comments to:
[email protected]WebSphere ® Support Technical Exchange 39 of 44
IBM Software Group
Questions and Answers
WebSphere ® Support Technical Exchange 40 of 44
IBM Software Group
BACKUP CHARTS
WebSphere ® Support Technical Exchange 41 of 44
IBM Software Group
Troubleshooting – “runmqsc” examples
WebSphere ® Support Technical Exchange 42 of 44
IBM Software Group
Troubleshooting – “runmqsc” examples
WebSphere ® Support Technical Exchange 43 of 44
IBM Software Group
Troubleshooting – “runmqsc” examples
WebSphere ® Support Technical Exchange 44 of 44