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, example devclus.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 execute amqsput , send messages.
  • refresh cluster command used on partial repositories whereas reset 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

Popular posts from this blog

html - Firefox flex bug applied to buttons? -

html - Missing border-right in select on Firefox -

c# - two queries in same method -