ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » Clustering » 2 FRs, can only put to 1 of them?

Post new topic  Reply to topic
 2 FRs, can only put to 1 of them? « View previous topic :: View next topic » 
Author Message
mqprimerib
PostPosted: Thu Oct 27, 2016 10:32 am    Post subject: 2 FRs, can only put to 1 of them? Reply with quote

Apprentice

Joined: 30 Mar 2016
Posts: 36
Location: Detroit Rock City

So I have 2 FRs, each one is on 2 different hosts. I have my CLUS sdr and rcv pairs working fine. By that, I mean I can:

DEFINE QLOCAL(Q.OB.IDVREQUEST) CLUSTER(IF14CLUS)

on one of the cluster QMs and the definition shows up on the other QM.

I can put a msg on one QM and I can get the msg from the other QM. Aweseom!

But when I try it the reverse way, put to the other QM, I can't refresh the remote queue. MQ Visual Edit complains that it is a remote queue and I can ONLY put messages.

I thought since both QMs were a FR in the cluster, I could put to both and see the msg on both QMs in the cluster. Did I misunderstand the concept?


My config:

Machine 1:
Quote:
display chstatus(*)
95 : display chstatus(*)
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM.IF14.2.TSTINT) CHLTYPE(CLUSSDR)
CONNAME(192.168.11.78(6538)) CURRENT
RQMNAME(QM.IF14.2.TSTINT) STATUS(RUNNING)
SUBSTATE(MQGET) XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM.IF14.1.TSTINT) CHLTYPE(CLUSRCVR)
CONNAME(192.168.11.7 CURRENT
RQMNAME(QM.IF14.2.TSTINT) STATUS(RUNNING)
SUBSTATE(RECEIVE)
display clusqmgr(*) qmtype
96 : display clusqmgr(*) qmtype
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(QM.IF14.1.TSTINT) CHANNEL(TO.QM.IF14.1.TSTINT)
CLUSTER(IF14CLUS) QMTYPE(REPOS)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(QM.IF14.2.TSTINT) CHANNEL(TO.QM.IF14.2.TSTINT)
CLUSTER(IF14CLUS) QMTYPE(REPOS)
dis clusqmgr(*)
97 : dis clusqmgr(*)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(QM.IF14.1.TSTINT) CHANNEL(TO.QM.IF14.1.TSTINT)
CLUSTER(IF14CLUS)
AMQ8441: Display Cluster Queue Manager details.
CLUSQMGR(QM.IF14.2.TSTINT) CHANNEL(TO.QM.IF14.2.TSTINT)
CLUSTER(IF14CLUS)
dis chstatus(*)
98 : dis chstatus(*)
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM.IF14.2.TSTINT) CHLTYPE(CLUSSDR)
CONNAME(192.168.11.78(6538)) CURRENT
RQMNAME(QM.IF14.2.TSTINT) STATUS(RUNNING)
SUBSTATE(MQGET) XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)
AMQ8417: Display Channel Status details.
CHANNEL(TO.QM.IF14.1.TSTINT) CHLTYPE(CLUSRCVR)
CONNAME(192.168.11.7 CURRENT
RQMNAME(QM.IF14.2.TSTINT) STATUS(RUNNING)
SUBSTATE(RECEIVE)




Machine 2:
Code:
display chstatus(*)
    21 : display chstatus(*)
AMQ8417: Display Channel Status details.
   CHANNEL(TO.QM.IF14.2.TSTINT)            CHLTYPE(CLUSRCVR)
   CONNAME(192.168.11.77)                  CURRENT
   RQMNAME(QM.IF14.1.TSTINT)               STATUS(RUNNING)
   SUBSTATE(RECEIVE)
AMQ8417: Display Channel Status details.
   CHANNEL(TO.QM.IF14.1.TSTINT)            CHLTYPE(CLUSSDR)
   CONNAME(192.168.11.77(6536))            CURRENT
   RQMNAME(QM.IF14.1.TSTINT)               STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)
display clusqmgr(*) qmtype
    22 : display clusqmgr(*) qmtype
AMQ8441: Display Cluster Queue Manager details.
   CLUSQMGR(QM.IF14.1.TSTINT)              CHANNEL(TO.QM.IF14.1.TSTINT)
   CLUSTER(IF14CLUS)                       QMTYPE(REPOS)
AMQ8441: Display Cluster Queue Manager details.
   CLUSQMGR(QM.IF14.2.TSTINT)              CHANNEL(TO.QM.IF14.2.TSTINT)
   CLUSTER(IF14CLUS)                       QMTYPE(REPOS)
dis clusqmgr(*)
    23 : dis clusqmgr(*)
AMQ8441: Display Cluster Queue Manager details.
   CLUSQMGR(QM.IF14.1.TSTINT)              CHANNEL(TO.QM.IF14.1.TSTINT)
   CLUSTER(IF14CLUS)
AMQ8441: Display Cluster Queue Manager details.
   CLUSQMGR(QM.IF14.2.TSTINT)              CHANNEL(TO.QM.IF14.2.TSTINT)
   CLUSTER(IF14CLUS)
dis chstatus(*)
    24 : dis chstatus(*)
AMQ8417: Display Channel Status details.
   CHANNEL(TO.QM.IF14.2.TSTINT)            CHLTYPE(CLUSRCVR)
   CONNAME(192.168.11.77)                  CURRENT
   RQMNAME(QM.IF14.1.TSTINT)               STATUS(RUNNING)
   SUBSTATE(RECEIVE)
AMQ8417: Display Channel Status details.
   CHANNEL(TO.QM.IF14.1.TSTINT)            CHLTYPE(CLUSSDR)
   CONNAME(192.168.11.77(6536))            CURRENT
   RQMNAME(QM.IF14.1.TSTINT)               STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(SYSTEM.CLUSTER.TRANSMIT.QUEUE)
Back to top
View user's profile Send private message
mqjeff
PostPosted: Thu Oct 27, 2016 10:37 am    Post subject: Reply with quote

Grand Master

Joined: 25 Jun 2008
Posts: 17447

Whether or not a queue is in a cluster or not, whether it's on a PR or an FR or not.

You can never get from a queue that is not a QLOCAL on the queue manager you are connected to.
_________________
chmod -R ugo-wx /
Back to top
View user's profile Send private message
Vitor
PostPosted: Thu Oct 27, 2016 11:07 am    Post subject: Re: 2 FRs, can only put to 1 of them? Reply with quote

Grand High Poobah

Joined: 11 Nov 2005
Posts: 26093
Location: Texas, USA

mqprimerib wrote:
But when I try it the reverse way, put to the other QM, I can't refresh the remote queue. MQ Visual Edit complains that it is a remote queue and I can ONLY put messages.


If you've got a remote queue in a cluster set up, you're doing it wrong.

mqprimerib wrote:
I thought since both QMs were a FR in the cluster, I could put to both and see the msg on both QMs in the cluster. Did I misunderstand the concept?


Yes. A message only ever exists on one queue manager in a cluster. It's on a local queue hosted by that queue manager. The cluster works out which queue manager that's going to be. You explained very well in your other post here:

mqprimerib wrote:
In the rare instance of a QM failure, the messages will remain queued and can be recovered when the queue manager comes back online



A remote queue is a specific object type with a specific purpose. It's not some kind of alias to a queue on a different queue manager that you can get from.

To achieve what you're describing (put a message from any queue manager, get that message from any queue manager) then you need to implement a queue sharing group. To do that, you need a mainframe because z/OS is the only OS which supports it, for good and sufficient reason.
_________________
Honesty is the best policy.
Insanity is the best defence.
Back to top
View user's profile Send private message
exerk
PostPosted: Thu Oct 27, 2016 2:41 pm    Post subject: Re: 2 FRs, can only put to 1 of them? Reply with quote

Jedi Council

Joined: 02 Nov 2006
Posts: 6339

Vitor wrote:
Yes. A message only ever exists on one queue manager in a cluster.

Caveat: Pub/Sub
_________________
It's puzzling, I don't think I've ever seen anything quite like this before...and it's hard to soar like an eagle when you're surrounded by turkeys.
Back to top
View user's profile Send private message
PeterPotkay
PostPosted: Thu Oct 27, 2016 4:38 pm    Post subject: Re: 2 FRs, can only put to 1 of them? Reply with quote

Poobah

Joined: 15 May 2001
Posts: 7717

exerk wrote:
Vitor wrote:
Yes. A message only ever exists on one queue manager in a cluster.

Caveat: Pub/Sub

I think you meant Caveat: z/OS Shared Queues
_________________
Peter Potkay
Keep Calm and MQ On
Back to top
View user's profile Send private message
bruce2359
PostPosted: Thu Oct 27, 2016 5:34 pm    Post subject: Re: 2 FRs, can only put to 1 of them? Reply with quote

Poobah

Joined: 05 Jan 2008
Posts: 9442
Location: US: west coast, almost. Otherwise, enroute.

PeterPotkay wrote:
exerk wrote:
Vitor wrote:
Yes. A message only ever exists on one queue manager in a cluster.

Caveat: Pub/Sub

I think you meant Caveat: z/OS Shared Queues

Putting on my pedantic hat for a moment ...

An MQ clustered queue is a queue whose name (and owning qmgr name) is known to qmgrs that are members of the cluster. A single message MQPUT to a clustered queue sends a single instance of a message to only ONE instance of the clustered queue, and is not replicated to any other queue.

Exerk was referring to a built-in capability (cool trick) in pub/sub which allows for multiple destinations for a single MQPUT call; thus, the result is multiple messages - one to each named destination.

A z/OS Shared Queue represents a coupling-facility structure (queue) destination for an MQPUT message. No other instance of the message exists in any other queue on any other qmgr.
_________________
I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live.
Back to top
View user's profile Send private message
Vitor
PostPosted: Fri Oct 28, 2016 4:33 am    Post subject: Re: 2 FRs, can only put to 1 of them? Reply with quote

Grand High Poobah

Joined: 11 Nov 2005
Posts: 26093
Location: Texas, USA

PeterPotkay wrote:
exerk wrote:
Vitor wrote:
Yes. A message only ever exists on one queue manager in a cluster.

Caveat: Pub/Sub

I think you meant Caveat: z/OS Shared Queues


Nope, I mentioned those.
_________________
Honesty is the best policy.
Insanity is the best defence.
Back to top
View user's profile Send private message
mqjeff
PostPosted: Fri Oct 28, 2016 5:11 am    Post subject: Reply with quote

Grand Master

Joined: 25 Jun 2008
Posts: 17447

Caveat 2033
_________________
chmod -R ugo-wx /
Back to top
View user's profile Send private message
hughson
PostPosted: Sun Oct 30, 2016 2:03 pm    Post subject: Re: 2 FRs, can only put to 1 of them? Reply with quote

Padawan

Joined: 09 May 2013
Posts: 1948
Location: Bay of Plenty, New Zealand

mqprimerib wrote:
But when I try it the reverse way, put to the other QM, I can't refresh the remote queue. MQ Visual Edit complains that it is a remote queue and I can ONLY put messages.

As a number of people have said already, you must always be getting from a queue that is physically hosted on the queue manager you are connected to. If you are trying to get from the queue that is a cluster queue hosted elsewhere, you will get the error you mention.

Make sure you are pointing MQ Visual Edit at the QLOCAL and not the cluster queue defintion that represents the queue hosted in the other queue manager.

If you want more assistance, post the answers to these commands on both queue managers, and show what you are using with MQ Visual Edit to attempt to read the queue.

Code:
DISPLAY QUEUE(*) WHERE(CLUSTER NE ' ')


Code:
DISPLAY QCLUSTER(*)


Cheers
Morag
_________________
Morag Hughson @MoragHughson
IBM MQ Technical Education Specialist
Get your IBM MQ training here!
MQGem Software
Back to top
View user's profile Send private message Visit poster's website
mqprimerib
PostPosted: Tue Nov 01, 2016 6:17 am    Post subject: Reply with quote

Apprentice

Joined: 30 Mar 2016
Posts: 36
Location: Detroit Rock City

Makes sense. I've defined qlocals with the cluster on both QMs now.

QM1:

Code:
DISPLAY QUEUE(*) WHERE(CLUSTER NE ' ')
    11 : DISPLAY QUEUE(*) WHERE(CLUSTER NE ' ')
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.ERROR)                          TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST)                  TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.NCC)              TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.TU)               TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IFT)                         TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.PRST.IDVRESPONSE)               TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.SLEEP)                          TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
DISPLAY QCLUSTER(*)
    12 : DISPLAY QCLUSTER(*)
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.ERROR)                          TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.ERROR)                          TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST)                  TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST)                  TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.NCC)              TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.NCC)              TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.TU)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.TU)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IFT)                         TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IFT)                         TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.PRST.IDVRESPONSE)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.PRST.IDVRESPONSE)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.SLEEP)                          TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.SLEEP)                          TYPE(QCLUSTER)




QM2:
Code:
DISPLAY QUEUE(*) WHERE(CLUSTER NE ' ')
     1 : DISPLAY QUEUE(*) WHERE(CLUSTER NE ' ')
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.ERROR)                          TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST)                  TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.NCC)              TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.TU)               TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IFT)                         TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.PRST.IDVRESPONSE)               TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
AMQ8409: Display Queue details.
   QUEUE(Q.SLEEP)                          TYPE(QLOCAL)
   CLUSTER(CQ.IF14)
DISPLAY QCLUSTER(*)
     2 : DISPLAY QCLUSTER(*)
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.ERROR)                          TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.ERROR)                          TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST)                  TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST)                  TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.NCC)              TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.NCC)              TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.TU)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IDVREQUEST.TU)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IFT)                         TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.OB.IFT)                         TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.PRST.IDVRESPONSE)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.PRST.IDVRESPONSE)               TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.SLEEP)                          TYPE(QCLUSTER)
AMQ8409: Display Queue details.
   QUEUE(Q.SLEEP)                          TYPE(QCLUSTER)
Back to top
View user's profile Send private message
exerk
PostPosted: Tue Nov 01, 2016 7:02 am    Post subject: Reply with quote

Jedi Council

Joined: 02 Nov 2006
Posts: 6339

I am assuming that Q.DEADLETTER is the defined DLQ in each queue manager, and if so, why have you shared each one in the cluster?
_________________
It's puzzling, I don't think I've ever seen anything quite like this before...and it's hard to soar like an eagle when you're surrounded by turkeys.
Back to top
View user's profile Send private message
bruce2359
PostPosted: Tue Nov 01, 2016 7:28 am    Post subject: Reply with quote

Poobah

Joined: 05 Jan 2008
Posts: 9442
Location: US: west coast, almost. Otherwise, enroute.

mqprimerib wrote:
Makes sense. I've defined qlocals with the cluster on both QMs now.

Did you intend to define ALL of your local queues as cluster queues? If so, why?
_________________
I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live.
Back to top
View user's profile Send private message
mqprimerib
PostPosted: Wed Nov 02, 2016 9:28 am    Post subject: Reply with quote

Apprentice

Joined: 30 Mar 2016
Posts: 36
Location: Detroit Rock City

exerk wrote:
I am assuming that Q.DEADLETTER is the defined DLQ in each queue manager, and if so, why have you shared each one in the cluster?




Good call exerk. I've removed the cluster designation from the DLQ. Tnx

Code:
dis QUEUE(Q.DEADLETTER)
     2 : dis QUEUE(Q.DEADLETTER)
AMQ8409: Display Queue details.
   QUEUE(Q.DEADLETTER)                     TYPE(QLOCAL)
   ACCTQ(QMGR)                             ALTDATE(2016-11-01)
   ALTTIME(19.45.20)                       BOQNAME( )
   BOTHRESH(0)                             CLUSNL( )
   CLUSTER( )                              CLCHNAME( )
...
Back to top
View user's profile Send private message
mqprimerib
PostPosted: Wed Nov 02, 2016 10:08 am    Post subject: Reply with quote

Apprentice

Joined: 30 Mar 2016
Posts: 36
Location: Detroit Rock City

bruce2359 wrote:
mqprimerib wrote:
Makes sense. I've defined qlocals with the cluster on both QMs now.

Did you intend to define ALL of your local queues as cluster queues? If so, why?


Being new to QM clustering, I ran with the all or nothing approach. (see DLQ post above)

So, the qlocal(Q.*) is where the application does its work. But after looking through the list, I should probably only define cluster queues named Q.OB.* and Q.PRST.*
Back to top
View user's profile Send private message
bruce2359
PostPosted: Wed Nov 02, 2016 12:00 pm    Post subject: Reply with quote

Poobah

Joined: 05 Jan 2008
Posts: 9442
Location: US: west coast, almost. Otherwise, enroute.

mqprimerib wrote:
So, the qlocal(Q.*) is where the application does its work. But after looking through the list, I should probably only define cluster queues named Q.OB.* and Q.PRST.*

The purpose of mq clustering is to have the destination queue, and the application that consumes messages from it, replicated across multiple qmgrs. This is referred to 'workload distribution.'

Q.* is not where application does its work. Applications MQOPEN a specific queue by its name, like a TIMECARD.QUEUE or INVENTORY.QUEUE.
_________________
I like deadlines. I like to wave as they pass by.
ב''ה
Lex Orandi, Lex Credendi, Lex Vivendi. As we Worship, So we Believe, So we Live.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » Clustering » 2 FRs, can only put to 1 of them?
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.