powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интеграция между Oracle AQ и Rabbit MQ
9 сообщений из 9, страница 1 из 1
Интеграция между Oracle AQ и Rabbit MQ
    #40075560
micis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто-нибудь делал обмен между очередями оракла и кролика?

На сайте кролика есть раздел с интеграцией, и это даже работает, но только из оракла в кролик (подписчик оракловой очереди вызывает ява-код и он отправляет в кролик). А в другую сторону уже проблема - 100% cpu в сессии. Потому что это полностью ява-код и даже Thread.sleep создаёт нагрузку на cpu.
Видимо надо делать что-то похожее на mgw-агент, но как?
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40075561
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
micis,

Не понял, в чём проблема? Ява какого-то хрена делает thread.sleep, чтобы положишь сообщение в очередь оракла? Для меня, например, самое тёмное, это как получить евент из оракла где-нибудь. А в оракл сунуть сообщение - это достаточно тривиально.
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40075564
micis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
Не понял, в чём проблема? Ява какого-то хрена делает thread.sleep, чтобы положишь сообщение в очередь оракла?
Ява-код создаёт коллбек-функцию (аналог ораклового подписчика) для сообщений кролика и делает sleep. А когда новое сообщение появляется в кролике, то происходит выход из sleep и переход в коллбек-функцию. По этой логике 99% времени сессия должна быть idle, а она находится в состоянии 100% cpu. Видимо это так работает ява внутри оракла. Вот я и спрашиваю, может кто другие варианты предложит.
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40075570
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
micis
Ява-код создаёт коллбек-функцию (аналог ораклового подписчика) для сообщений кролика и делает sleep.

Стандартные amqp либы для явы нормально работают и у них такого не наблюдается. Если хочешь, можешь сделать сервис сбоку, который будет соединяться с кроилом, ораклом и гонять запросы туда-сюда. Если у тебя нет проблем с тем, чтобы ждать сообщения из оракла, то всё должно быть хорошо. С jar'ами, которые внутри оракла работают, я не знаю что, может есть смысл собрать такую с нормальной либой.
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40075582
micis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
сделать сервис сбоку
Да, именно так и работает оракловый mgw-агент. Но это и проблема - у нас время ответа сервиса должно укладываться в 3 секунды. А это куча вызовов процедур и через очереди раз 5 надо пройти. Поэтому и пытаемся использовать подписчики везде где возможно.
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40075681
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
micis
она находится в состоянии 100% cpu.
как проверяли? что конкретно сессия делает? какие syscall?
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40075990
micis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sayan Malakshinov
как проверяли? что конкретно сессия делает? какие syscall?

Интересно получается, если пользователь выполняет такой код:
Код: plsql
1.
2.
3.
CREATE OR REPLACE PROCEDURE java_sleep(P_MILLI_SECONDS IN NUMBER)  AS LANGUAGE JAVA NAME 'java.lang.Thread.sleep(long)';
/
exec java_sleep(300*1000);

То ожидания в сессии могут быть такие:
Код: sql
1.
2.
3.
4.
5.
SQL> select STATUS,EVENT,P1TEXT,P1,P2TEXT,P2,WAIT_CLASS,STATE,WAIT_TIME,WAIT_TIME_MICRO,TIME_REMAINING_MICRO,seconds_in_wait from v$session where username='U2';

STATUS                   EVENT                                              P1TEXT                  P1 P2TEXT                  P2 WAIT_CLASS           STATE                      WAIT_TIME WAIT_TIME_MICRO TIME_REMAINING_MICRO SECONDS_IN_WAIT
------------------------ -------------------------------------------------- ---------- --------------- ---------- --------------- -------------------- -------------------- --------------- --------------- -------------------- ---------------
ACTIVE                   PGA memory operation                                                    65536                          1 Other                WAITED SHORT TIME                 -1              17                                  250

Или такие:
Код: plsql
1.
2.
3.
STATUS                   EVENT                                              P1TEXT                  P1 P2TEXT                  P2 WAIT_CLASS           STATE                      WAIT_TIME WAIT_TIME_MICRO TIME_REMAINING_MICRO SECONDS_IN_WAIT
------------------------ -------------------------------------------------- ---------- --------------- ---------- --------------- -------------------- -------------------- --------------- --------------- -------------------- ---------------
ACTIVE                   db file sequential read                            file#                    1 block#              985188 User I/O             WAITED KNOWN TIME                  1            5034                                   52

Или такие:
Код: plsql
1.
2.
3.
STATUS                   EVENT                                              P1TEXT                  P1 P2TEXT                  P2 WAIT_CLASS           STATE                      WAIT_TIME WAIT_TIME_MICRO TIME_REMAINING_MICRO SECONDS_IN_WAIT
------------------------ -------------------------------------------------- ---------- --------------- ---------- --------------- -------------------- -------------------- --------------- --------------- -------------------- ---------------
ACTIVE                   SQL*Net message from client                        driver id       1650815232 #bytes                   1 Idle                 WAITED KNOWN TIME              19165       191650469                                  195


Но значения всегда одинаковые во время одного выполнения (кроме счётчиков). И ОЕМ интерпретирует их как 100% cpu.
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40076063
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
micis,

это не ожидания... если STATE=WAITED KNOWN TIME, значит CPU и есть, и смотреть на event не надо
...
Рейтинг: 0 / 0
Интеграция между Oracle AQ и Rabbit MQ
    #40076086
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
micis,

в целом ничего страшного, просто неинструментирован java-код нормально: процесс CPU не жрет, нормально спит по poll частями не больше секунды

Код: plsql
1.
2.
3.
SQL> exec java_sleep(6000)

PL/SQL procedure successfully completed.


short_stack
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884
SQL> oradebug short_stack
ksedsts()+426<-ksdxfstk()+58<-ksdxcb()+872<-sspuser()+223<-__sighandler()<-__poll()+16<-sjonio_poll()+164<-joet_poll()+324<-joet_schedule()+1004<-joet_doze()+283<-joet_sleep()+200<-joevm_invoke_sysnative()+471<-joevm_invokerecursive()+789<-joe_run_vm()+13884


strace:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
strace: Process 12090 attached
read(17, "\0\0\1^\6\0\0\0\0\0\21i-\376\377\377\377\377\377\377\377\1\0\0\0\6\0\0\0\3^."..., 8208) = 350
getrusage(RUSAGE_THREAD, {ru_utime={tv_sec=0, tv_usec=586422}, ru_stime={tv_sec=0, tv_usec=80527}, ...}) = 0
poll(NULL, 0, 1000)                     = 0 (Timeout)
poll([{fd=17, events=POLLIN|POLLRDNORM}], 1, 0) = 0 (Timeout)
poll(NULL, 0, 1000)                     = 0 (Timeout)
getrusage(RUSAGE_THREAD, {ru_utime={tv_sec=0, tv_usec=587180}, ru_stime={tv_sec=0, tv_usec=80527}, ...}) = 0
poll(NULL, 0, 1000)                     = 0 (Timeout)
poll(NULL, 0, 1000)                     = 0 (Timeout)
getrusage(RUSAGE_THREAD, {ru_utime={tv_sec=0, tv_usec=587332}, ru_stime={tv_sec=0, tv_usec=80527}, ...}) = 0
poll([{fd=17, events=POLLIN|POLLRDNORM}], 1, 0) = 0 (Timeout)
poll(NULL, 0, 1000)                     = 0 (Timeout)
poll(NULL, 0, 994)                      = 0 (Timeout)

...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интеграция между Oracle AQ и Rabbit MQ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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