Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQSeries как сделать RollBack одному сообщению? / 5 сообщений из 5, страница 1 из 1
28.05.2014, 15:01
    #38654614
arba2014
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQSeries как сделать RollBack одному сообщению?
Стандартный код. Вопрос внутри.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim MQSes ,  MQMessage ,  MQQueueManager ,  MQQueue
....
Set MQMessage = MQSes.AccessMessage()
Set Opt = MQSes.AccessGetMessageOptions()
Opt.Options = MQGMO_SYNCPOINT 

...

DO
   Call  MQQueue.Get( MQMessage ,  Opt) 
   inXml$ = MQMessage.ReadString(MQMessage.MessageLength)

   if not ReadyForThisXML(inXml$) then
// и тут я понимаю что обработать в данный момент этот xml не могу. Могу позже. 
// Мне надо его вернуть в очередь (не комитить GET), и продолжить обрабатывать те, что еще есть в очереди. КАК ?
   else
      ....
      Call MQQueueManager.Commit 
   end if
LOOP

Call MQQueue.close()
Call MQQueueManager.disconnect()
...
Рейтинг: 0 / 0
28.05.2014, 22:38
    #38655090
netics
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQSeries как сделать RollBack одному сообщению?
Механиз Backout queue подойдёт в этой ситуации? https://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm35205_.htm
Ну и в принципе никто не мешает брать сообщения, отказываться от его обработки, класт обратно с сохранением всех заголовков.
...
Рейтинг: 0 / 0
29.05.2014, 02:55
    #38655192
Новый Год
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQSeries как сделать RollBack одному сообщению?
arba2014Стандартный код. Вопрос внутри.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Dim MQSes ,  MQMessage ,  MQQueueManager ,  MQQueue
....
Set MQMessage = MQSes.AccessMessage()
Set Opt = MQSes.AccessGetMessageOptions()
Opt.Options = MQGMO_SYNCPOINT 

...

DO
   Call  MQQueue.Get( MQMessage ,  Opt) 
   inXml$ = MQMessage.ReadString(MQMessage.MessageLength)

   if not ReadyForThisXML(inXml$) then
// и тут я понимаю что обработать в данный момент этот xml не могу. Могу позже. 
// Мне надо его вернуть в очередь (не комитить GET), и продолжить обрабатывать те, что еще есть в очереди. КАК ?
   else
      ....
      Call MQQueueManager.Commit 
   end if
LOOP

Call MQQueue.close()
Call MQQueueManager.disconnect()



так не получится

можно например читать сообщения не деструктивно (c опцией browse)
когда нужное сооющение находится, можно вычитать его по message id i corell id

или можно прочитать сообщение, и, если оно не подходит, переложить его в другую очередь и читать далее.
позже перекинуть его обратно, самое простое - чисто через какое-то время

но лучше всего не хранить сообщения в очереди
вычитайте его и сохраните куда-нибудь, в базу в табличку например
и там потом обрабатывайте

а еще лучше сделайте так, чтобы вы всегда могли обрабатывать любое сообщение
...
Рейтинг: 0 / 0
29.05.2014, 02:58
    #38655193
Новый Год
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQSeries как сделать RollBack одному сообщению?
neticsМеханиз Backout queue подойдёт в этой ситуации? https://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzaw.doc/jm35205_.htm
Ну и в принципе никто не мешает брать сообщения, отказываться от его обработки, класт обратно с сохранением всех заголовков.

не, не стоит так делать, у тс прикладная логика а не битое сообщение
обратно клать тем более не надо
можно просто зациклиться читая одно и то же сообщение 100500 раз
...
Рейтинг: 0 / 0
29.05.2014, 09:43
    #38655316
arba2014
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MQSeries как сделать RollBack одному сообщению?
Новый Год
так не получится

можно например читать сообщения не деструктивно (c опцией browse)
когда нужное сооющение находится, можно вычитать его по message id i corell id

или можно прочитать сообщение, и, если оно не подходит, переложить его в другую очередь и читать далее.
позже перекинуть его обратно, самое простое - чисто через какое-то время

но лучше всего не хранить сообщения в очереди
вычитайте его и сохраните куда-нибудь, в базу в табличку например
и там потом обрабатывайте

а еще лучше сделайте так, чтобы вы всегда могли обрабатывать любое сообщение

Эти способы понятны.

Печально конечно.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / MQSeries как сделать RollBack одному сообщению? / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]