Как использовать API qmhrcvpm - PullRequest
0 голосов
/ 03 мая 2019

Мне нужно получить все сообщения в pgmq. Я пытался использовать * FIRST в качестве параметра, но api ничего не возвращает.

     qmhrcvpm(rcvm0200:%size(rcvm0200):'RCVM0200':'*':0:
              '*FIRST':*BLANKS:0:'*SAME':errDS);

Althoug, если я использую ключ, API возвращает правильное сообщение:

    qmhrcvpm(rcvm0200:%size(rcvm0200):'RCVM0200':'*':0:
              '*ANY':fldkey:0:'*SAME':errDS);

Дэвид: API не возвращает ошибку, bytesAvailable of errDs равно 0

Мэнди: я не понимаю вашего вопроса.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Чтобы получать сообщения из журнала заданий, вам необходимо использовать '* PRVJLMSG' или '* NXTJLMSG'.

Выберите одно из них в зависимости от порядка сообщений, которые вы хотите обработать.

Первый звонок должен получить сообщение с ключом x'00000000 '.

Затем вы используете полученный ключ для получения следующего сообщения.

requestKey = x'00000000';
DOU errDS.bytesAvailable > 0 Or rcvm0200.bytesAvailable = 0;
  qmhrcvpm(rcvm0200:%size(rcvm0200):'RCVM0200':'*':0:
          '*NXTJLMSG':requestKey :0:'*SAME':errDS);
  requestKey = rcvm0200.Msgid;

Enddo;
1 голос
/ 06 мая 2019

Я начал писать это как комментарий, но когда я набирал текст, он запрашивает разъяснения и дает ответы.

Какой тип сообщения вы получаете с помощью * ANY и fldkey?Если это сообщение * REQUEST, это ваша проблема.* FIRST, * NEXT и * PRV - все сообщения с пропуском запросов.

Или, возможно, вы извлекаете сообщение где-то в журнале заданий, но не активную программу или процедуру при извлечении по ключу.* FIRST, * NEXT и * PRV извлекают только сообщения для активной программы или процедуры в очереди.См. документацию для объяснения в описании * NXTJLMSG или * PRVJLMSG.

Я также нахожу в документации под описанием для Ключ сообщения :

Если вам известен ключ сообщения для сообщения, которое вы хотите получить, вы можете получить это сообщение без учета очереди сообщений, содержащей сообщение.Это можно сделать, указав ключ в этом параметре, специальное значение «*» для параметра записи стека вызовов и значение «0» для параметра счетчика стека вызовов.Это полезно, если сообщение было отправлено в запись стека вызовов, которой больше нет в стеке вызовов.

Может быть, то, что будет работать для вас, основываясь на описании * NXTJLMSG, будет использовать *NXTJLMSG и ключ * TOP или x'00000000'.

...