Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
Добрый день. Перед тем, как забрать (деструктивный get) сообщение из очереди, необходимо его просмотреть и выполнить с ним некоторые операции. В случае успешного выполнения всех действий, сообщение нужно из очереди удалить, иначе - оставить все как есть, через некоторое время попытаться снова. Организую это так. Очередь открываю на просмотр Код: pascal 1. Получаю сообщение, не удаляя его Код: pascal 1. 2. 3. Выполняю необходимые действия, закрываю очередь, если все ок, открываю Код: pascal 1. и забираю с удалением. Надо добавить возможность сегментации сообщений. Если добавить при просмотре сообщения Код: pascal 1. 2. 3. 4. 5. 6. 7. то сообщение из очереди удаляется (если закомментировать последнюю строку - не удалится, но, я так понимаю, сегментация работать не будет). Как правильно получить сегментированное сообщение из очереди на просмотр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 15:38 |
|
||
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
боюсь что эта схема не правильная делается это немножко не так должно быть примерно так: 1 сообщение читается деструктивно с опцией mqgmo_syncpoint 2 делаются какие-то действия 3 В случае успешного выполнения всех действий - commit, в случае неуспешного - rollback, и обеспечить задержку перед повторным чтением или так 1 сообщение читается деструктивно с опцией mqgmo_syncpoint 2 делаются какие-то действия 3 В случае успешного выполнения всех действий - commit, в случае неуспешного - записть сообщения в вспомогательную очередь и тоже коммит 4 на вспомогательную очередь повесить обработчик, который кидает сообщения назад через какое-то время а как на вопрос ответить - не помню я знал но забыл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 15:54 |
|
||
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
Новый Год, спасибо, буду разбираться с SYNCPOINT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2012, 15:58 |
|
||
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
C mqgmo_syncpoint проблема та же. Пока на пытаешься добавить сегментацию - работает отлично, с сегментацией - удаляет из очереди. Причем пишет, что MQBACK отработал нормально, CompCode = 0, Reason = 0, но сообщения в очереди нет. На данный момент параметры такие Код: pascal 1. 2. 3. 4. 5. 6. 7. Если раскомментировать последнюю строку, удаляет сообщение из очереди. Подскажите, пожалуйста, какие нужны настройки, чтобы и сегментация работала, и в случае неудачи сообщение не удалялось из очереди. Вариант с дополнительной очередью очень нежелателен. Если есть возможность обойтись без нее - было бы намного лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2012, 11:33 |
|
||
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
Судя по документации mq, конфликтов сегментации с back быть не должно. Получить сегментированное сообщение из очереди можно только с MQGMO_COMPLETE_MSG. Код: sql 1. 2. 3. 4. 5. 6. 7. это отсюда http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=%2Fcom.ibm.mq.csqzak.doc%2Ffr14560_.htm По поводу back для групп и сегментированных сообщений написано так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Пробую экспериментировать с локальными и глобальными единицами работы - но результат одинаковый, с опцией MQGMO_COMPLETE_MSG MQBACK как будто отрабатывает, но на самом деле сообщение из очереди удаляется. Может быть имеет значение, что именно делаешь в единице работы? Но тогда почему MQBACK работает при отключенной сегментации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2012, 12:13 |
|
||
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
_taddy, это выглядит так, как будто нужно PMR открывать меня только вот это смущает Код: plaintext 1. 2. 3. это что за язык-то такой? GetMsgOptions.Options := MQGMO_SYNCPOINT; GetMsgOptions.Options := MQGMO_COMPLETE_MSG; выглядит как 2 операции присваивания, а должно быть побитное или; в С вот так GetMsgOptions.Options = GetMsgOptions.Options | MQGMO_SYNCPOINT; GetMsgOptions.Options = GetMsgOptions.Options | MQGMO_COMPLETE_MSG; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2012, 14:59 |
|
||
|
Предварительный просмотр сообщения из очереди mq
|
|||
|---|---|---|---|
|
#18+
Новый Год, спасибо огромное, глупая ошибка. Delphi это, надо MQGMO_SYNCPOINT + MQGMO_COMPLETE_MSG. Теперь работает, как надо. :) Посоветуйте еще, пожалуйста, как бы Вы организовали процесс получения сообщение. В приложении установлен таймер, каждые N секунд оно открывает очередь, пытается забрать сообщение. Если ошибка 2033 (сообщений нет) - снова ждем N секунд. Если есть - цикл, забираем все сообщения, пока не вылетит какая-нибудь ошибка (в том числе 2033). И дальше ждем. Наверное, можно это как-то правильнее организовать. Может, с MQGMO_WAIT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2012, 11:24 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=38&tid=1601594]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 266ms |
| total: | 414ms |

| 0 / 0 |
