powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / IIB (WebSphere MQ) перехватить событие
11 сообщений из 11, страница 1 из 1
IIB (WebSphere MQ) перехватить событие
    #38986033
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как перехватить событие когда очередь началась заполняться?

К примеру если нужно каждый раз перед загрузкой новых данных (в очередь), выполнить определенные запросы в бд. Или выполнить какие-нибудь вычисления. Как быть, считать сообщения? Sequence?
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38988991
GVF112GVF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
golovonometr,

Некторые базы данных, умеют отображать очереди MQ как таблицы - DB2, Informix, Oracle ...
Насколько Я помню к mq-очередям можно применять запрос на наличие сообщений в очереди без их извлечения.
Можно создать триггеры в MQ, можно написать расширения (плагины) на разных уровнях MQ (канальном, очереди и т.д.).

Много полезной информации можно найти здесь -
http://www.ibm.com/developerworks/websphere/zones/businessintegration/wmq.html

Configuring and using XA transactions with WebSphere MQ V6 Classes for Java -
http://www.ibm.com/developerworks/websphere/library/techarticles/0601_ritchie/0601_ritchie.html

Business Integration - WebSphere MQ SupportPacs
http://www-01.ibm.com/support/docview.wss?rs=977&uid=swg27007205

IBM WebSphere MQ V7.1 and V7.5 Features and Enhancements - http://www.redbooks.ibm.com/abstracts/sg248087.html
WebSphere MQ Primer: An Introduction to Messaging and WebSphere MQ - http://www.redbooks.ibm.com/abstracts/redp0021.html?Open

PS: Integrating Oracle database applications with WebSphere MQ applications -
http://www.ibm.com/developerworks/websphere/library/techarticles/0807_tuli/0807_tuli.html

C уважением,
Вадим.
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38994865
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непонятно что вы имели ввиду под триггерами в MQ, их вроде как нет там. А что касается возможности базы отображать очередь mq как таблицу, чет не совсем ясно.

Но меня больше интересует сама возможность на стороне MQ, рулить данными. Простой пример - два потока, первый поток занимается сбором данных, второй сохранением, но перед очередным сохранением нужно очистить таблички в бд.

Есть конечно рукожопный вариант - записывать в бд, потом каждый раз проверять на последнюю запись. Но это не дело
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38995242
imperfekt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
golovonometr,

Не очень понятен вопрос. В WMB / IIB обработка событий в message flow и так происходит по мере поступления их в очередь. Есть узел MQGet, который позволяет конфигурировать, вычитывать сообщение из очереди или нет.

Если речь идет об уровне WMQ, то отслеживать операции GET / PUT можно с помощью UserExit'ов.
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38995629
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, это понятно.

Просто не совсем ясно было как ослеживать такие моменты как начало записи в очередь, в случае с FileInput решилось InputLocalEnvironment.File.Record. Это позволяет проверить хотя бы на то что запись с файла поступила первая или нет.

Но в другой ситуации пришлось бы кидать наверно специальное сообщение в очередь.
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38995753
golovonometr,

"Классика" для WMQ:
1. Создать специальную локальную очередь для программы "триггер-монитор".
2. Запустить программу "триггер-монитор", указав созданную очередь в качестве входной.
3. Создать объект типа "процесс", в нем описать программу, которая будет запускаться для чтения сообщений в целевой очереди.
3. На целевой очереди (в которую поступают сообщения) поменять параметры, включив триггер на первое сообщение в очереди.
Указать очередь триггера (п.1) и процесс обработки (п.3)

Что будет происходить:
При поступлении первого сообщения в целевую очередь будет сгенерировано служебное (триггерное) сообщение в очередь триггер-монитора.
Триггер-монитор, получив сообщение прочитает из него имя процесса обработки и запустит программу, которая там указана.
Программа должна будет считать и обработать все сообщения в очереди, после чего завершить свою работу.
Триггерные сообщения будут генерироваться только тогда, когда запущена программа триггер-монитор.
Этот подход для данного случая не единственный и, возможно, не самый надежный.

Возможно, тут больше подойдет такой подход:
При передаче и приеме сообщений использовать "логический блок сообщений" (Message Group).
В этом случае можно сформировать и потом считать последовательность сообщений, которые будут одной "группой" и будут иметь возрастающий номер внутри группы. Плюс, при чтении, можно указать флаг начать обработку группы сообщений только тогда, когда все сообщения группы станут доступны в целевой очереди (MQGMO_ALL_MSGS_AVAILABLE).

Подробнее здесь: Grouping logical messages .
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38996134
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров, я не думаю что это надежное решение. Представьте ситуацию, как я описал выше. Когда в целевую очередь поступают какие-то данные например из файла, но перед каждой загрузкой нужно выполнять truncate.

Может случиться, что первое сообщение разберется и распарсится быстрей, чем сработает truncate. Мы же не собираемся рисовать всю схему в одном flow. Нас же интересует разбить на несколько flow, чтоб была возможность создавать несколько инстансов.
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38996574
golovonometr,

Какое из двух приведенных решений имеется в виду? Триггер или группа сообщений?

Файл на вход поступает одним сообщением или несколькими? Если файл поступает на вход таким образом, что каждая строка(запись) формирует отдельное сообщение (?), то как раз Message Group может помочь. Или хочется распараллелить обработку каждой строки?

Для большей конкретики нужно более подробное описание задачи, что, откуда и в каком виде может приходить, какие Flow предполагаются, какой препроцессинг (тот же truncate) и когда нужен. На каких этапах нужен параллелизм?
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38996821
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаровgolovonometr,

Какое из двух приведенных решений имеется в виду? Триггер или группа сообщений?

Файл на вход поступает одним сообщением или несколькими? Если файл поступает на вход таким образом, что каждая строка(запись) формирует отдельное сообщение (?), то как раз Message Group может помочь. Или хочется распараллелить обработку каждой строки?

Для большей конкретики нужно более подробное описание задачи, что, откуда и в каком виде может приходить, какие Flow предполагаются, какой препроцессинг (тот же truncate) и когда нужен. На каких этапах нужен параллелизм?

Да каждая строка формирует отдельное сообщение, и параллелить хочется. Например, чтение из файла распараллелить не получится, но оно происходит быстро. Этот процесс можно считать мгновенным, но вот преобразование и сохранение в бд (в другую систему). Может продолжаться довольно длительный период. И этот процесс просто напрашивается на параллельное выполнение.

Препроцессинг, нужен в начале когда файл попадает на обработку, и хорошим тоном был бы постпроцессинг в конце, когда файл полностью обработан, чтоб можно было завершить или откатить транзакции.

Было бы очень хорошо совершить весь процесс за короткий промежуток времени
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38996938
golovonometrЕвгений Хабаровgolovonometr,

Какое из двух приведенных решений имеется в виду? Триггер или группа сообщений?

Файл на вход поступает одним сообщением или несколькими? Если файл поступает на вход таким образом, что каждая строка(запись) формирует отдельное сообщение (?), то как раз Message Group может помочь. Или хочется распараллелить обработку каждой строки?

Для большей конкретики нужно более подробное описание задачи, что, откуда и в каком виде может приходить, какие Flow предполагаются, какой препроцессинг (тот же truncate) и когда нужен. На каких этапах нужен параллелизм?

Да каждая строка формирует отдельное сообщение, и параллелить хочется. Например, чтение из файла распараллелить не получится, но оно происходит быстро. Этот процесс можно считать мгновенным, но вот преобразование и сохранение в бд (в другую систему). Может продолжаться довольно длительный период. И этот процесс просто напрашивается на параллельное выполнение.

Препроцессинг, нужен в начале когда файл попадает на обработку, и хорошим тоном был бы постпроцессинг в конце, когда файл полностью обработан, чтоб можно было завершить или откатить транзакции.

Было бы очень хорошо совершить весь процесс за короткий промежуток времени

А анализ в каком именно месте происходят задержки есть? Т.е. проверено ли утверждение, что "расписывание" 100 строк файла в 100 потоков параллельно дает существенный выигрыш по времени по сравнению с "расписыванием" этих же 100 строк в один поток (последовательно)?

Сколько в среднем строк в файле? Каков средний размер файла и строки?
Сильно ли отличается алгоритм обработки строки, в зависимости от данных в этой строке?

Если каждая строка файла примерно одинакова и раскладывается по общему набору таблиц, то распараллеливание может дать не прирост, а просадку по производительности, т.к. будет открыто N-соединений с СУБД, будет идти параллельная вставка в единое подмножество таблиц, что может приводить к блокировкам и конкуренции за ресурсы СУБД.
Дополнительно, если каждая строка обрабатывается в отдельном потоке, то вопрос что делать, если файл обработался частично? Например обработались строки с 1 по 10, а на 11 - некорректные данные. В зависимости от технологии - может потребоваться откат для всего файла, в этом случае из параллельных потоков этого сделать нельзя, тк каждый поток будет отдельной транзакцией.

Т.е. если задержки на стороне СУБД - имеет смысл разбираться почему. Возможно, для ускорения работы нужно переделать код INSERT/UPDATE, чтобы задействовать пакетный режим, aka batch update (один prepare, много bindParams + addBatch, один execute).

Возможно, результат парсинга файла имеет смысл поместить во временной таблице(ах), и уже после этого выполнять SQL-операторы, которые перенесут данные из временных таблиц в целевые. Это может избавить от необходимости делать truncate,  тк временные таблицы автоматически будут удалены при commit или disconnect (зависит от опций создания и СУБД).
Если есть проблемы в скорости соединения между брокером и СУБД, возможно имеет смысл использовать исполнение прикладного кода на стороне СУБД (хранимые процедуры например), а на вход подавать либо сам файл, либо значения из каждой строки файла, либо заполненные временные таблицы, содержащие преобразованный файл.

Пока я считаю, что проблему с недостаточной производительностью можно решить более простым и прямым способом, нежели формированием отдельных сообщений на каждую строку файла и параллельной вставкой в СУБД этих данных.
...
Рейтинг: 0 / 0
IIB (WebSphere MQ) перехватить событие
    #38997093
golovonometr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений Хабаров
А анализ в каком именно месте происходят задержки есть? Т.е. проверено ли утверждение, что "расписывание" 100 строк файла в 100 потоков параллельно дает существенный выигрыш по времени по сравнению с "расписыванием" этих же 100 строк в один поток (последовательно)?

Сколько в среднем строк в файле? Каков средний размер файла и строки?
Сильно ли отличается алгоритм обработки строки, в зависимости от данных в этой строке?

Если каждая строка файла примерно одинакова и раскладывается по общему набору таблиц, то распараллеливание может дать не прирост, а просадку по производительности, т.к. будет открыто N-соединений с СУБД, будет идти параллельная вставка в единое подмножество таблиц, что может приводить к блокировкам и конкуренции за ресурсы СУБД.
Дополнительно, если каждая строка обрабатывается в отдельном потоке, то вопрос что делать, если файл обработался частично? Например обработались строки с 1 по 10, а на 11 - некорректные данные. В зависимости от технологии - может потребоваться откат для всего файла, в этом случае из параллельных потоков этого сделать нельзя, тк каждый поток будет отдельной транзакцией.

Т.е. если задержки на стороне СУБД - имеет смысл разбираться почему. Возможно, для ускорения работы нужно переделать код INSERT/UPDATE, чтобы задействовать пакетный режим, aka batch update (один prepare, много bindParams + addBatch, один execute).

Возможно, результат парсинга файла имеет смысл поместить во временной таблице(ах), и уже после этого выполнять SQL-операторы, которые перенесут данные из временных таблиц в целевые. Это может избавить от необходимости делать truncate,  тк временные таблицы автоматически будут удалены при commit или disconnect (зависит от опций создания и СУБД).
Если есть проблемы в скорости соединения между брокером и СУБД, возможно имеет смысл использовать исполнение прикладного кода на стороне СУБД (хранимые процедуры например), а на вход подавать либо сам файл, либо значения из каждой строки файла, либо заполненные временные таблицы, содержащие преобразованный файл.

Пока я считаю, что проблему с недостаточной производительностью можно решить более простым и прямым способом, нежели формированием отдельных сообщений на каждую строку файла и параллельной вставкой в СУБД этих данных.

не скажу за 100 - скажу за 5, существенный выигрыш!

Файлы разные от 110 строк, до 1 500 000, длина строки от 45 символов до 870. Размер от несколько килобайт, до 1 Гб

Нет никаких проблем с конкуренцией в БД. Вроде как не наблюдали пока. Да конечно, или вставка всех данных или никаких, в требовании очистить таблицы и раструбить на всю деревню, что данные не загружены из-за ошибки.

Давно используем PreperedStatement, и конечно же addBatch(). В случае отдельных потоков это легко решается они получают Connection, который можно закоммитить после отработки всех задействованных потоков. Но средствами integration bus, по-моему такое не возможно.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / IIB (WebSphere MQ) перехватить событие
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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