Procesamiento de una Cola MQ

Todo lo relacionado con MQ en ambiente OS/390 o z/OS
Responder
Cvisser

Procesamiento de una Cola MQ

Mensaje por Cvisser » 23 Ene 2008, 17:31

Gente, estoy teniendo un problema puntual con el procesamiento de una cola MQ con "n" registros que con un programa COBOL debe bajar a un archivo secuencial.

los procesos que insertan registros en esta cola pueden agregar mas de 1 registro en una misma instancia de ejecucion.

El tema que cuando ejecuto el programa que lee la cola corta el proceso con un RC=2033 cuando terminó el primer "LOTE".

Por ejemplo si el proceso que carga ejecutó 3 veces y cargó 5 registros en cada corrida voy a tener 15 registros en la cola. (Esto lo puedo ver a través del Browse de MQ en ISPF)

Cuando ejecuto el proceso que lee solo me extrae 5 registros (de la primera ejecución del programa que inserta) dejando los otros 10 en la cola.

Entiendo que el problema podría ser una opción en la invocación a las funciones de MQ.

Desde ya, muchas gracias a todos por cualquier ayuda....

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 375
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: Otra

Re: Procesamiento de una Cola MQ

Mensaje por LuisFer » 23 Ene 2008, 17:54

Te expongo lo que he entendido:
La cola contiene 15 Mensajes que ha su vez son 15 * n registros para el fichero y tu problema es que lee el primer registro, es decir 1 *n, y ya no lee mas.
Si es así tu problema es que tienes que reinicializar los campos MD.CORRELID y MD.MSGID con MQMI_NONE (para el MSGID) y MQCI_NONE (para el CORRELID).
En PL/I sería algo como:
Do While(Reason = 0);
MsgDesc.CorrelId = MQCI_NONE;
MsgDesc.MsgId = MQMI_NONE;
MQGET(hcon,.......);
end;
Creo que para cobol sería un move (pero no lo puedo asegurar ya que Cobol no sé)

saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 375
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: Otra

Re: Procesamiento de una Cola MQ

Mensaje por LuisFer » 23 Ene 2008, 18:01

LuisFer escribió:Te expongo lo que he entendido:
La cola contiene 15 Mensajes que ha su vez son 15 * n registros para el fichero y tu problema es que lee el primer registro, es decir 1 *n, y ya no lee mas.
Si es así tu problema es que tienes que reinicializar los campos MD.CORRELID y MD.MSGID con MQMI_NONE (para el MSGID) y MQCI_NONE (para el CORRELID).
En PL/I sería algo como:
Do While(Reason = 0);
MsgDesc.CorrelId = MQCI_NONE;
MsgDesc.MsgId = MQMI_NONE;
MQGET(hcon,hobj,gmo,bufferlen,buffer,datalencompcode,reason);
write (file) from (buffer);
end;
Creo que para cobol sería un move (pero no lo puedo asegurar ya que Cobol no sé)

saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

Cvisser

Mensaje por Cvisser » 25 Ene 2008, 15:16

modificamos el programa de acuerdo a tus indicaciones y ejecutó correctamente. Faltaba agregar

MsgDesc.MsgId = MQMI_NONE

dentro del ciclo de lecturas de la cola.

Desde ya, muchas gracias por tu colaboración

Saludos,

Avatar de Usuario
LuisFer
Colaborador Senior
Colaborador Senior
Mensajes: 375
Registrado: 27 May 2006, 16:06
País: España
Ciudad: Madrid
Ocupación: Otra

Mensaje por LuisFer » 25 Ene 2008, 18:45

Me alegro, este era sencillo, de todas maneras deberías inicializar también el CorrelId, ya que la cola (puede que no sea el caso) puede estar indexada por CorrelId o MsgId por rendimiento (o por ninguno que puede ser lo mas normal).
Saludos
No me sigas, puedo no guiarte, no vayas delante , puedo no seguirte, caminemos juntos y sé simplemente, mi amigo.

Responder