Begin when Oracle,簡(jiǎn)稱BWO,是一個(gè)基于Oracle數(shù)據(jù)庫的異步消息傳遞系統(tǒng),可以在不同系統(tǒng)之間高效地傳遞信息,并保證消息傳輸?shù)目煽啃院褪聞?wù)性。它可以被用于各種領(lǐng)域,如金融、電信、交通等等。下面我們將深入探討B(tài)WO的特點(diǎn)以及具體應(yīng)用。
首先,BWO采用了異步傳輸模式,即消息的發(fā)送與接收是分開的。這樣一來,就不需要像同步模式一樣等待對(duì)方的響應(yīng),從而提高了消息傳輸?shù)男省@纾谌粘I钪校覀兪褂檬謾C(jī)發(fā)送短信時(shí),如果手機(jī)上方有信號(hào),短信便能很快地發(fā)送出去,無需等待對(duì)方的回復(fù),這就是異步傳輸模式。
DECLARE
L_MSG_ID NUMBER;
L_MSG_SIZE NUMBER;
L_MSG_PROP VARCHAR2(32767);
L_MSG_BIN BLOB;
BEGIN
BEGIN WHEN
DECLARE
L_MSG_TYPE VARCHAR2(32767) := 'PAYMENT.CHECK';
L_COR_ID VARCHAR2(32767) := 'WI782293';
L_DEST VARCHAR2(32767) := 'BOSS';
L_EXP_DATE DATE := SYSDATE + 7;
L_MSG VARCHAR2(32767) := '{ ''PAY_AMOUNT'' : ''10000'' }';
BEGIN
L_MSG_ID := bwo.send_msg(p_msg_type => L_MSG_TYPE,
p_cor_id => L_COR_ID,
p_dest => L_DEST,
p_msg_props => NULL,
p_exp_date => L_EXP_DATE,
p_msg => UTL_RAW.CAST_TO_RAW(L_MSG)
);
END;
THEN
DBMS_OUTPUT.PUT_LINE('Message with ID ' || L_MSG_ID || ' sent to queue BOSS');
END WHEN;
END;
其次,BWO能夠保證傳輸消息的可靠性和事務(wù)性。即使在消息傳輸過程中出現(xiàn)了意外(如發(fā)送失敗、接收方無法連接等),系統(tǒng)也能夠自動(dòng)重發(fā)消息,直到消息被成功接收。這種機(jī)制可以確保消息傳輸?shù)目煽啃浴T谟螒蜷_發(fā)中,BWO可以用于傳遞游戲內(nèi)的各種消息,比如玩家死亡和獲勝等等。這樣一來,無論服務(wù)器出現(xiàn)何種問題,都不會(huì)影響玩家的體驗(yàn)。
BEGIN
BEGIN WHEN
L_MSG_ID := bwo.receive_msg(p_dest => 'BOSS',
p_msg_type => 'PAYMENT.CHECK',
p_wait => bwo.wait(5, a_units => 'MINUTE'),
p_msg_size => L_MSG_SIZE,
p_msg_prop => L_MSG_PROP,
p_msg_bin => L_MSG_BIN,
p_commit => TRUE
);
THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Message ' || L_MSG_ID || ' received from queue BOSS');
END LOOP;
END WHEN;
END;
另外,BWO還能夠?qū)崿F(xiàn)簡(jiǎn)單的消息路由功能。舉個(gè)例子,在銀行系統(tǒng)中,往往需要將客戶的轉(zhuǎn)賬消息發(fā)送到多個(gè)接收方,比如賬戶管理部門、監(jiān)管機(jī)構(gòu)等等。這時(shí)候,BWO就可以幫助系統(tǒng)自動(dòng)將消息路由到相應(yīng)的接收方,從而提高工作效率。
BEGIN
BEGIN WHEN
L_MSG_ID := bwo.send_msg(p_msg_type => 'TRANSFER',
p_cor_id => 'WI782293',
p_dest => 'BANK',
p_msg_props => 'TO_ACC=123456789',
p_exp_date => SYSDATE + 7,
p_msg => UTL_RAW.CAST_TO_RAW('{ ''AMOUNT'' : ''10000'', ''FROM_ACC'' : ''987654321'' }')
);
THEN
DBMS_OUTPUT.PUT_LINE('Transfer message with ID ' || L_MSG_ID || ' sent to queue BANK');
END WHEN;
END;
BEGIN
BEGIN WHEN
L_MSG_ID := bwo.receive_msg(p_dest => 'BANK/ACCOUNTS',
p_msg_props => 'TO_ACC=123456789',
p_wait => bwo.wait(5, a_units => 'MINUTE'),
p_msg_size => L_MSG_SIZE,
p_msg_prop => L_MSG_PROP,
p_msg_bin => L_MSG_BIN,
p_commit => TRUE
);
THEN
LOOP
DBMS_OUTPUT.PUT_LINE('Transfer message ' || L_MSG_ID || ' received from queue BANK/ACCOUNTS');
END LOOP;
END WHEN;
END;
總之,BWO是一個(gè)非常實(shí)用的消息傳遞系統(tǒng),它能夠保證消息的可靠性、事務(wù)性和高效性,并且具有很強(qiáng)的可擴(kuò)展性和靈活性,可以適用于各種不同的領(lǐng)域。如果您想在自己的系統(tǒng)中使用BWO,可以參考Oracle官方文檔和案例,了解更多詳細(xì)信息。