|   | 
	 
  
    | 
RSS Feed - WebSphere MQ Support
 | 
RSS Feed - Message Broker Support
 |   
 
  
	     | 
	 | 
   
 
  
	|  MSgID and CorrID | 
	« View previous topic :: View next topic »  | 
   
  
  	
	  
		
		
		  | Author | 
		  Message
		 |  
		
		  | nik_iway | 
		  
		    
			  
				 Posted: Thu Oct 20, 2005 8:40 pm    Post subject: MSgID and CorrID | 
				     | 
			   
			 
		   | 
		 
		
		   Centurion
 
 Joined: 21 Jul 2005 Posts: 115
  
  | 
		  
		    
			  
				Hi everybody,
 
 
I am doing a request reply scenario where i need to i dentify a valid reply for a specific request.
 
 
i am issuing my MQPUT on the client side by specifying 
 
 
COMPUTE MQPMO-OPTIONS = MQPMO-NO-SYNCPOINT + MQPMO-FAIL-IF-QUIESCING.
 
 
	MOVE WS-INPUT-Q TO MQMD-REPLYTOQ.
 
	MOVE WS-INPUT-Q TO MQMD-MSGTYPE.
 
	CALL 'MQPUT' USING  CON-HANDLE
 
                               OPO-Q-HANDLE
 
                               MQMD
 
                               MQPMO
 
                               OUTPUT-BUFFER-LENGTH
 
                               WS-OUTPUT-BUFFER
 
                               COMP-CODE
 
                               REASON-CODE.
 
 	MOVE 'MQPUT'       TO PRT-COMMAND.
 
 	MOVE COMP-CODE     TO PRT-COMP-CODE.
 
	MOVE REASON-CODE   TO PRT-REASON-CODE.
 
	ACCEPT PRT-LOG-TIME  FROM TIME.
 
	MOVE PRT-LOG-MESSAGE TO WS-PRINT-LINE.
 
	PERFORM 8000-PRINT-LINE.
 
	MQ-PUT-EXIT.
 
	EXIT.
 
 
i wait for the reply in reply to queue
 
i issue the following MQGET call
 
            MOVE MQMI-NONE TO MQMD-MSGID.
 
            MOVE MQCI-NONE TO MQMD-CORRELID
 
 
	COMPUTE MQGMO-OPTIONS = MQGMO-WAIT +
 
                                   MQGMO-ACCEPT-TRUNCATED-MSG +
 
                                   MQMO_MATCH_CORREL_ID + 
 
                                   MQGMO-NO-SYNCPOINT +
 
                                   MQGMO-FAIL-IF-QUIESCING
 
 
On the SERVER sidde 
 
i create a variable and pass the incoming MQMD message-ID to that variable in the  Working storage area
 
 
SAVED-MSGID            PIC X(24). 
 
 
and after the MQGET i pass the MQMD-MEssage ID into SAVED-MSGID
 
 
         MQ-GET SECTION.
 
 
           MOVE MQMI-NONE TO MQMD-MSGID.
 
           MOVE MQCI-NONE TO MQMD-CORRELID.
 
      *
 
           COMPUTE MQGMO-OPTIONS = MQGMO-WAIT +
 
                                   MQGMO-ACCEPT-TRUNCATED-MSG +
 
                                   MQGMO-NO-SYNCPOINT +
 
                                   MQGMO-FAIL-IF-QUIESCING.
 
      *    Wait up to 30 seconds.
 
           MOVE 30000 TO MQGMO-WAITINTERVAL.
 
      *
 
           CALL 'MQGET' USING CON-HANDLE
 
                              OPI-Q-HANDLE
 
                              MQMD
 
                              MQGMO
 
                              INPUT-BUFFER-LENGTH
 
                              WS-OUTPUT-BUFFER
 
                              RETURNED-LENGTH
 
                              COMP-CODE
 
                              REASON-CODE.
 
 
      *
 
           MOVE 'MQGET'           TO PRT-COMMAND.
 
           MOVE COMP-CODE         TO PRT-COMP-CODE.
 
           MOVE REASON-CODE       TO PRT-REASON-CODE.
 
           ACCEPT PRT-LOG-TIME  FROM TIME.
 
           MOVE PRT-LOG-MESSAGE   TO WS-PRINT-LINE.
 
           PERFORM 8000-PRINT-LINE.
 
 
       4500-MQ-GET-EXIT.
 
           EXIT.
 
        MOVE MQMD-MSGID TO SAVED-MSGID. 
 
 
before the the MQPUT operation i moved the SAVED-MSGID into the MQMD-CORRELATION ID
 
 
   MOVE SAVED-MSGID TO MQMD-CORRELID
 
 
 
and do the MQPUT with the following operations
 
 
4000-MQ-PUT SECTION.
 
 
           COMPUTE MQPMO-OPTIONS = MQPMO-NO-SYNCPOINT +
 
                                   MQPMO-FAIL-IF-QUIESCING.
 
           MOVE MQMT-REPLY TO MQMD-MSGTYPE.
 
      *
 
           CALL 'MQPUT' USING  CON-HANDLE
 
                               OPO-Q-HANDLE
 
                               MQMD
 
                               MQPMO
 
                               OUTPUT-BUFFER-LENGTH
 
                               WS-OUTPUT-BUFFER
 
                               COMP-CODE
 
                               REASON-CODE.
 
      *
 
           MOVE 'MQPUT'       TO PRT-COMMAND.
 
           MOVE COMP-CODE     TO PRT-COMP-CODE.
 
           MOVE REASON-CODE   TO PRT-REASON-CODE.
 
           ACCEPT PRT-LOG-TIME  FROM TIME.
 
           MOVE PRT-LOG-MESSAGE TO WS-PRINT-LINE.
 
           PERFORM 8000-PRINT-LINE.
 
 
       4000-MQ-PUT-EXIT.
 
           EXIT
 
 
i am a learner and i am using of the examples given by the capitalware. Can anybody tell me if ther are any mistakes in my code  and  wat does it mean by 
 
           MOVE MQMI-NONE TO MQMD-MSGID.
 
           MOVE MQCI-NONE TO MQMD-CORRELID.
 
 
Waiting for your reply
 
Thanking you | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | EddieA | 
		  
		    
			  
				 Posted: Thu Oct 20, 2005 9:19 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		    Jedi
 
 Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles 
  | 
		  
		    
			  
				The way you have explained things, it's difficult to follow what code is from the client and what is the server.  Anyway, some observations:
 
   
	| Quote: | 
   
  
	|  MOVE WS-INPUT-Q TO MQMD-MSGTYPE.  | 
   
 
 
A queue name is not a message type.
 
   
	| Quote: | 
   
  
	 MOVE MQMI-NONE TO MQMD-MSGID.
 
MOVE MQCI-NONE TO MQMD-CORRELID
 
 
COMPUTE MQGMO-OPTIONS = MQGMO-WAIT +
 
MQGMO-ACCEPT-TRUNCATED-MSG +
 
MQMO_MATCH_CORREL_ID +
 
MQGMO-NO-SYNCPOINT +
 
MQGMO-FAIL-IF-QUIESCING | 
   
 
 
You are asking the GET to match on a CorrelationID, but by using MQCI_NONE, you are saying that any CorrelationID will match.
 
   
	| Quote: | 
   
  
	wat does it mean by
 
MOVE MQMI-NONE TO MQMD-MSGID.
 
MOVE MQCI-NONE TO MQMD-CORRELID | 
   
 
 
For a PUT, it means you want the Queue Manager to generate a MessagID for you, and you don't want a CorrelationID set.
 
 
For a GET, it means that you want to read the next message off the queue, no matter what it's MesageID and CorrelationID are..
 
 
The normal pattern for a Client, is before the PUT, you set MessageID and CorrelationID to NONE.  After the PUT, you extract the MessageID that MQ has filled in for you.  You then issue a GET with Wait, setting the MessageID to NONE and the CorrelationID to the MesageID you just captured.  That way, you will only GET a message that matches.
 
 
For the Server, you always GET with MesageID and CorrelationID set to NONE.  That way you always get every message.  Before sending the reply, you move the incoming MessageID into CorelationID, and then set MessageID to NONE.  That way the Client will be able to identify the message.
 
 
And after every MQ operation, you should check the Completion/Return codes.
 
 
Cheers, _________________ Eddie Atherton
 
IBM Certified Solution Developer - WebSphere Message Broker V6.1
 
IBM Certified Solution Developer - WebSphere Message Broker V7.0 | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | nik_iway | 
		  
		    
			  
				 Posted: Thu Oct 20, 2005 9:37 pm    Post subject: Thanks EddieA | 
				     | 
			   
			 
		   | 
		 
		
		   Centurion
 
 Joined: 21 Jul 2005 Posts: 115
  
  | 
		  
		    
			  
				EddieA :
 
After the PUT, you extract the MessageID that MQ has filled in for you
 
 
How do we extract the Message ID that MQ has filled? | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | EddieA | 
		  
		    
			  
				 Posted: Thu Oct 20, 2005 10:20 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		 
		
		    Jedi
 
 Joined: 28 Jun 2001 Posts: 2453 Location: Los Angeles 
  | 
		  
		    
			  
				
   
	| Quote: | 
   
  
	| How do we extract the Message ID that MQ has filled | 
   
 
 
MOVE MQMD-MSGID TO ...     
 
 
Cheers, _________________ Eddie Atherton
 
IBM Certified Solution Developer - WebSphere Message Broker V6.1
 
IBM Certified Solution Developer - WebSphere Message Broker V7.0 | 
			   
			 
		   | 
		 
		
		  | Back to top | 
		  
		  	
		   | 
		 
		
		    | 
		 
		
		  | 
		    
		   | 
		 
	   
	 | 
   
 
  
	     | 
	 | 
	Page 1 of 1 | 
   
 
 
 
  
  	
	  
		
		  
 
  | 
		  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
  | 
  		 
	   
	 | 
   
 
  	 | 
	  |