ibm - Websphere MQ Cluster Workload Balancing: messages going to dead letter queue -
i have created wmq cluster 3 qmgrs. 2 full repository , 1 partial repository. here mqsc
used:
crtmqm gw strmqm gw runmqsc gw alter qmgr deadq('system.dead.letter.queue') define listener(gw.listener) trptype(tcp) port(1416) ipaddr(xx.xx.xx.xx) start listener(gw.listener) define channel(system.admin.svrconn) chltype(svrconn) alter qmgr chlauth(disabled) end runmqsc qm01 alter qmgr repos('development.cluster') end runmqsc qm02 alter qmgr repos('development.cluster') end runmqsc qm01 define chl(to.qm01) chltype(clusrcvr) trptype(tcp) + conname('xx.xx.xx.xx(1414)') cluster(development.cluster) end runmqsc qm02 define chl(to.qm02) chltype(clusrcvr) trptype(tcp) + conname('xx.xx.xx.xx(1415)') cluster(development.cluster) end runmqsc gw define chl(to.gw) chltype(clusrcvr) trptype(tcp) + conname('xx.xx.xx.xx(1416)') cluster(development.cluster) end runmqsc qm01 define channel(to.qm02) chltype(clussdr) trptype(tcp) + conname('xx.xx.xx.xx(1415)') cluster(development.cluster) end runmqsc qm02 define channel(to.qm01) chltype(clussdr) trptype(tcp) + conname('xx.xx.xx.xx(1414)') cluster(development.cluster) end runmqsc gw define channel(to.qm01) chltype(clussdr) trptype(tcp) + conname('xx.xx.xx.xx(1414)') cluster(development.cluster) define channel(to.qm02) chltype(clussdr) trptype(tcp) + conname('xx.xx.xx.xx(1415)') cluster(development.cluster) end runmqsc qm02 define qlocal('backup') cluster(development.cluster) define qlocal('provider') cluster(development.cluster) define qlocal('response') cluster(development.cluster) define qlocal('store') cluster(development.cluster) refresh cluster(development.cluster) repos(yes) end runmqsc qm01 define qlocal('backup') cluster(development.cluster) define qlocal('provider') cluster(development.cluster) define qlocal('response') cluster(development.cluster) define qlocal('store') cluster(development.cluster) refresh cluster(development.cluster) repos(yes) end
now putting message qmgr gw
on queue provider
. please note gw
not host queue. hosted qm01
, qm02
amqsput provider gw
sadly messages going dead letter queue of qmgr gw
.
kindly fix this. suggestions debugging lot.
there several possible issues here.
the channels not identically defined. have mixed-case names, others have uppercase names. may work if counting on lack of quotes ensure folded upper case qmgr. however, commands have been edited, @ least far conname
values concerned, i'm not assuming resulting objects match.
after creating cluster, did check channels show auto-explicit
? how know cluster booted up.
it's possible refresh cluster
command causing outage. not required when defining new objects, , in fact quite disruptive. waits on channels restart , @ point in time running command, commands advertise new objects have been sent repositories not returned. refresh cluster
requests channels stop, possibly in mid-batch, queues commands cluster delete information received has not yet replied to, , sends new commands cluster advertising objects deleted. if sounds confusing, think how cluster command server on repository feels.
remove refresh cluster
command queue definition script.
once ascertain channels have advanced auto-explicit
, removed refresh cluster
can start actual debugging. helps in these cases @ dlq header of dead messages find out reason code listed. provides sufficient information find problem. can enable variety of qmgr diagnostic events , view them using 1 of event viewing tools, or @ error logs on qmgrs @ either end of channel.
these next suggestions have nothing diagnostic, other qmgr built using best practices in general less error prone , easier debug. here unsolicited mq cluster best practice recommendations.
- abandon
to.[qmgr]
channel names! use[cluster].[qmgr]
names instead, exampledevclus.qm01
. ensures have channels dedicated each cluster, if have overlapping clusters. does, however, mean cluster names can't have.
in them , must < 10 characters. - on things not full repositories, define explicit
clussdr
1 of repositories. should ever have more 2 repositories (for example during migration) cluster members able find way. - always use quotes in definitions. if having problems getting work definitions have 1 possible interpretation shorter path resolution.
- give channels time settle when defining new cluster channel, , verify starts , goes correct state.
- use
amqsput
open newly defined remotely-hosted cluster queues output, without putting messages them. make sure no errors (i.e. queues resolve) during open , make sure cluster channels up. then executeamqsput
, send messages. refresh cluster
command used on partial repositories whereasreset cluster
command used on full repositories. in case command being used improperly , on wrong type of cluster node. expect problems.- hopefully in real life there no application queues hosted on full repository qmgrs. best possible thing can cluster host full repositories on dedicated qmgrs - if qmgrs on same host application qmgrs. separating these ensures cluster operation traffic , application traffic never traverse same channels. makes possible patch or upgrade repositories before application qmgrs.
Comments
Post a Comment