Процедура установки сообщения записи очереди (QUEUE_MSG_SET), корректировка алгоритма вадачи исходящих сообщений очереди серверу приложений (отдаём и те, которые успешно обработаны сервером приложений, чтобы для них запускался обработчик БД, а так же учитываем дату последней обработки при формировании очереди)
This commit is contained in:
parent
f683f44bca
commit
af8b384a66
@ -353,6 +353,14 @@ create or replace package PKG_EXS as
|
|||||||
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Óñòàíîâêà ñîîáùåíèÿ çàïèñè î÷åðåäè */
|
||||||
|
procedure QUEUE_MSG_SET
|
||||||
|
(
|
||||||
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
||||||
|
BMSG in blob, -- Ðåçóëüòàò îáðàáîòêè
|
||||||
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
||||||
|
);
|
||||||
|
|
||||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
||||||
procedure QUEUE_PUT
|
procedure QUEUE_PUT
|
||||||
(
|
(
|
||||||
@ -1363,8 +1371,11 @@ create or replace package body PKG_EXS as
|
|||||||
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
REXSSERVICE := GET_EXSSERVICE_ID(NFLAG_SMART => 0, NRN => REXSSERVICEFN.PRN);
|
||||||
/* Ïðîâåðèì óñëîâèÿ èñïîëíåíèÿ - èñõîäÿùåå, íåäîèñïîëíåíî, è îñòàëèñü ïîïûòêè */
|
/* Ïðîâåðèì óñëîâèÿ èñïîëíåíèÿ - èñõîäÿùåå, íåäîèñïîëíåíî, è îñòàëèñü ïîïûòêè */
|
||||||
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and
|
if ((REXSSERVICE.SRV_TYPE = NSRV_TYPE_SEND) and
|
||||||
(REXSQUEUE.EXEC_STATE in
|
(REXSQUEUE.EXEC_STATE in (NQUEUE_EXEC_STATE_INQUEUE,
|
||||||
(NQUEUE_EXEC_STATE_INQUEUE, NQUEUE_EXEC_STATE_APP_ERR, NQUEUE_EXEC_STATE_DB_ERR, NQUEUE_EXEC_STATE_ERR)) and
|
NQUEUE_EXEC_STATE_APP_OK,
|
||||||
|
NQUEUE_EXEC_STATE_APP_ERR,
|
||||||
|
NQUEUE_EXEC_STATE_DB_ERR,
|
||||||
|
NQUEUE_EXEC_STATE_ERR)) and
|
||||||
(((REXSSERVICEFN.RETRY_SCHEDULE <> NRETRY_SCHEDULE_UNDEF) and
|
(((REXSSERVICEFN.RETRY_SCHEDULE <> NRETRY_SCHEDULE_UNDEF) and
|
||||||
(REXSQUEUE.EXEC_CNT < REXSSERVICEFN.RETRY_ATTEMPTS)) or
|
(REXSQUEUE.EXEC_CNT < REXSSERVICEFN.RETRY_ATTEMPTS)) or
|
||||||
((REXSSERVICEFN.RETRY_SCHEDULE = NRETRY_SCHEDULE_UNDEF) and (REXSQUEUE.EXEC_CNT = 0))) and
|
((REXSSERVICEFN.RETRY_SCHEDULE = NRETRY_SCHEDULE_UNDEF) and (REXSQUEUE.EXEC_CNT = 0))) and
|
||||||
@ -1399,7 +1410,7 @@ create or replace package body PKG_EXS as
|
|||||||
from (select T.RN
|
from (select T.RN
|
||||||
from EXSQUEUE T
|
from EXSQUEUE T
|
||||||
where QUEUE_SRV_TYPE_SEND_EXEC_CHECK(T.RN) = NQUEUE_EXEC_YES
|
where QUEUE_SRV_TYPE_SEND_EXEC_CHECK(T.RN) = NQUEUE_EXEC_YES
|
||||||
order by T.IN_DATE)
|
order by NVL(T.EXEC_DATE, T.IN_DATE))
|
||||||
where ROWNUM <= NPORTION_SIZE)
|
where ROWNUM <= NPORTION_SIZE)
|
||||||
loop
|
loop
|
||||||
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
/* Çàïîìèíàåì èõ ðåã. íîìåðà â áóôåðå */
|
||||||
@ -1483,6 +1494,24 @@ create or replace package body PKG_EXS as
|
|||||||
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
||||||
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
||||||
end QUEUE_RESP_SET;
|
end QUEUE_RESP_SET;
|
||||||
|
|
||||||
|
/* Óñòàíîâêà ñîîáùåíèÿ çàïèñè î÷åðåäè */
|
||||||
|
procedure QUEUE_MSG_SET
|
||||||
|
(
|
||||||
|
NEXSQUEUE in number, -- Ðåã. íîìåð çàïèñè î÷åðåäè
|
||||||
|
BMSG in blob, -- Ðåçóëüòàò îáðàáîòêè
|
||||||
|
RCQUEUE out sys_refcursor -- Êóðñîð ñ èçìåí¸ííîé ïîçèöèåé î÷åðåäè
|
||||||
|
)
|
||||||
|
is
|
||||||
|
begin
|
||||||
|
/* Âûñòàâèì ñîîáùåíèå */
|
||||||
|
update EXSQUEUE T set T.MSG = BMSG where T.RN = NEXSQUEUE;
|
||||||
|
if (sql%rowcount = 0) then
|
||||||
|
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NEXSQUEUE, SUNIT_TABLE => 'EXSQUEUE');
|
||||||
|
end if;
|
||||||
|
/* Âåðíåì èçìåíåííóþ ïîçèöèþ î÷åðåäè */
|
||||||
|
QUEUE_GET(NFLAG_SMART => 0, NEXSQUEUE => NEXSQUEUE, RCQUEUE => RCQUEUE);
|
||||||
|
end QUEUE_MSG_SET;
|
||||||
|
|
||||||
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
/* Ïîìåùåíèå ñîîáùåíèÿ îáìåíà â î÷åðåäü */
|
||||||
procedure QUEUE_PUT
|
procedure QUEUE_PUT
|
||||||
@ -1592,10 +1621,6 @@ create or replace package body PKG_EXS as
|
|||||||
PKG_SQL_CALL.EXECUTE_STORED(SSTORED_NAME => UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP,
|
PKG_SQL_CALL.EXECUTE_STORED(SSTORED_NAME => UTL_STORED_MAKE_LINK(SPACKAGE => REXSMSGTYPE.PKG_RESP,
|
||||||
SPROCEDURE => REXSMSGTYPE.PRC_RESP),
|
SPROCEDURE => REXSMSGTYPE.PRC_RESP),
|
||||||
RPARAM_CONTAINER => PRMS);
|
RPARAM_CONTAINER => PRMS);
|
||||||
/*
|
|
||||||
TODO: owner="mikha" created="15.11.2018"
|
|
||||||
text="Протестировать что будет если процедура не установила параметр перед завершением и вообще - как эту ситуацию отловить, чтобы ругаться, мол не установлено значение"
|
|
||||||
*/
|
|
||||||
/* Çàáèðàåì ïàðàìåòð ñ îøèáêàìè îáðàáîò÷èêà */
|
/* Çàáèðàåì ïàðàìåòð ñ îøèáêàìè îáðàáîò÷èêà */
|
||||||
SERR := PRC_RESP_ARG_STR_GET(NIDENT => NIDENT, SARG => SCONT_FLD_SERR);
|
SERR := PRC_RESP_ARG_STR_GET(NIDENT => NIDENT, SARG => SCONT_FLD_SERR);
|
||||||
/* Åñëè áûëè îøèáêè - ñêàæåì îá ýòîì */
|
/* Åñëè áûëè îøèáêè - ñêàæåì îá ýòîì */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user