999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于存儲過程和HTTP協議的消息主動推送系統實現

2016-12-12 07:34:20夏凌云龔文濤
微型電腦應用 2016年11期
關鍵詞:數據庫微信用戶

夏凌云,龔文濤

基于存儲過程和HTTP協議的消息主動推送系統實現

夏凌云,龔文濤

數據庫中的存儲過程和觸發器多用于數據完整性檢測和復雜規則約束,其提供了一個當數據表數據發生變更后的主動操作機制,Oracle數據庫還提供了UTL_HTTP包來實現數據庫對外部WEB服務器的主動訪問。利用這兩個特性,可以在數據發生變化的時候主動地將變化內容及時傳輸給外部業務服務器,再通過業務服務器發送給相應的業務人員,以此避免外部業務系統主動和頻繁讀取數據庫服務器,提高系統消息發送效率,降低系統查詢負擔。

存儲過程;觸發器;消息推送;Oracle;UTL_HTTP

0 引言

隨著高校信息化建設發展和個人智能終端越來越普及,移動化學習和辦公逐漸成為趨勢,需要向師生用戶的移動終端主動推送消息或提醒的應用和場景也越來越多。在以往的使用過程中,主動推送的消息一般采用應用內推送的方式,在各個業務系統的APP端獨立推送,以保證推送的及時性。但是隨著高校信息化建設情況的發展,這種模式也顯現出了一些弊端,主要是需要推送消息的 APP會越來越多,用戶安裝起來比較復雜和混亂,也不符合統一門戶和入口的高校信息化移動建設要求。

現在很多高校比較常用的是將一些應用和消息推送功能統一集成到微信公眾平臺或者QQ公眾平臺上,通過這些公共平臺進行校園信息化功能的消息推送和用戶交互。使用這樣的第三方獨立平臺來進行消息推送在解決了老問題的時候又帶來了新問題,由于校內的信息化系統消息接口并不統一,致使第三方公共平臺的后臺服務器很多情況下不得不對各個系統消息接口進行定時輪詢,以確定是否有新消息和發送目標。而每個系統需要推送的消息、目標用戶往往非常多,消息也往往不是內容完全相同的群發消息。在這種情況下對每個業務系統的輪詢將消耗后臺服務器和業務系統服務器太多的資源,給整個校園信息化系統帶來很大的負擔。經過不斷探索,我們發現采用數據庫自帶的存儲過程和高級接口,并結合通用HTTP協議來實現消息的主動推送,在用來替代輪詢過程和減輕系統負擔上有著很好的效果。

1 存儲過程和觸發器

存儲過程是一種重要的數據庫對象,一般由SQL語句組合而成,具有在存儲過程中聲明和設置的SQL變量、實現流程控制、處理異常,能夠對數據進行更新、讀取和刪除操作并返回結果集的功能[1]。一般來說,SQL語句每次提交執行一次就需要編譯一次,而存儲過程在創造時經過一次編譯后,可以將編譯結果保存在數據庫中以便反復調用,因此具有較高的執行效率。同時,存儲過程還可以降低整個應用程序的復雜性,具有可移植性、重用性、安全性和伸縮性等特性。因此,使用存儲過程操作數據庫可以有效地提高數據

庫應用的實現效率[2]。

觸發器是一種特殊類型的存儲過程,顧名思義,它是由某個數據庫事件的發生而被自動隱式調用的一種存儲過程。除了在一些數據庫系統事件里觸發的系統觸發器,數據庫系統中最常用的是DML(Data Manipulation Language 數據操控語言)觸發器,在我們的消息主動推送系統實現中采用的也是DML觸發器。觸發器主要由觸發對象、觸發事件、觸發事件和觸發頻率等等元素組成,細節如圖1所示:

圖1 觸發器組成

我們可以這樣簡要地理解觸發器工作過程:在數據庫中編譯成功并保存的觸發器,會一直監測著其設置的觸發對象(某個表、視圖或其它數據庫對象),當在該對象上發生指定的觸發事件(數據插入、 更新、刪除或其它數據庫事務)時,將在該觸發事件被執行前或執行后(由觸發時機指定),以指定的觸發頻率(語句級:每句SQL指令調用一次;行級:每影響一行數據調用一次)來執行觸發器中所設置的一系列指令操作。

2 系統總體設計

總體設計如圖2所示:

圖2 系統總體設計

從上所述我們可以看出,觸發器可以由一個數據庫事件啟動,在某個具體的數據庫事件發生時自動后臺運行。結合我們的需求,當我們需要主動提醒的數據每次插入到數據表中的同時,我們都可以利用觸發器在數據庫中觸發一系列指定操作的運行,現在的問題就是如何使這一系列觸發操作能傳遞到數據庫外部的其它服務器中。以Oracle數據庫軟件為例,其提供了 UTL_HTTP包[3],用以實現數據庫事務對外部WEB服務器的HTTP訪問與互聯。

編寫一個行觸發器監視通知提醒數據表,當每有一行新通知插入到該表的時候,觸發器被觸發并調用預先編譯好的存儲過程,使用UTL_HTTP包將具體消息發送到外部WEB服務器,外部服務器接收到消息后再對用戶進行相應的消息具體推送。可以看出,在如此設計思路充分利用了數據庫的觸發器機制,外部服務器再不需要對數據庫進行定時輪詢,在大大降低了雙邊系統的負載的同時,還消除了輪詢時間間隔,使消息推送更加的及時。

3 系統實現

在這里我們以實現將校園門戶中的待辦事項提醒推送到微信企業號的通知消息中為例,介紹整個流程的具體實現方法。假設所有用戶的新增待辦事項都被業務系統插入到數字校園公共數據庫用戶CORE_iUPC的TODO_INFO表中,我們需要通過行觸發器調用一段存儲過程,將該插入數據的具體內容(代辦人員和待辦事項)通過HTTP協議主動推送到微信企業號后臺服務器。本系統示例中的數據庫軟件為Oracle 11g RAC,存儲過程和觸發器[4]采用PL/SQL編寫[5],HTTP端代碼采用C#編寫,使用IIS7.0發布WEB服務。

3.1 觸發器設計觸發器的PL/SQL的代碼如下,具體含義見注釋:

3.2 存儲過程設計

存儲過程SendNotice的代碼如下,該存儲過程的重點是在調用oracle所提供的utl_http包來訪問HTTP服務,賦予該存儲過程HTTP Client的角色和功能,具體含義見注釋:

在這里為了簡要演示UTL_HTTP的調用方法,我們使用其來調用HTTP_GET方法來向外部服務器發送信息,將相關變量組合成GET頁面的URL參數部分進行發送,這樣的實現方法比較簡單易懂。不過在參數較多或者參數比較復雜的情況下,利用URL傳遞參數的方法可能不太適用,我們還是推薦使用HTTP_POST方法來發送數據,將所有參數打包成一個XML或者JSON格式的數據,通過POST方法把數據發送到對方服務器。POST方法對所傳參數的長度和格式一般沒有限制,也基本不會有特殊字符沖突處理問題。

3.3 HTTP接收消息和對外推送

為了便于接收從數據庫推送來的消息并同時往微信企業號推送,我們直接在微信企業號的后臺創建了上述UTL_HTTP包所指定的接受推送頁面sendnotice.aspx,在接收到參數后調用微信企業號的后臺消息發送功能,往指定人員的微信推送相應通知信息。后臺Web服務器由IIS7.0搭建,代碼用C#編寫,在Page_Load時運行的有關代碼片段如下:

其中往微信企業號內用戶發送通知消息的iUPC_Notice類具體實現的是與微信企業號公眾平臺所對接的相關標準[6],具體內容參見騰訊公司發布的企業號使用文檔,該文檔描述了后臺服務器與微信企業號之間的接口規范和調用流程等等細節,在此不再累述。

4 Oracle 11 g相關權限和安全設置

從數據安全角度來說,在數據庫軟件中主動調用HTTP協議訪問外部站點是一個高危動作,因此Oracle對內部用戶是否能發起對外HTTP連接做了嚴格的限制。在以前的版本是控制某用戶對 UTL相關網絡訪問包(UTL_HTTP、UTL_MAIL、UTL_TCP等等)的調用權限,而在Oracle 11g版本中進行了更高細粒度的ACL(Access Control List,訪問控制列表)限制。在PL/SQL下配置用戶“test”訪問某個IP地址80端口的ACL的具體方法如下:

DBMS_NETWORK_ACL_ADMIN包用于創建、管理、修改和刪除ACL,其中的create_acl方法用于創建一條ACL,如果這條 ACL還需要指定給其他用戶使用,還可以利用add_privilege 方法進行添加用戶,assign_acl方法用于對某條ACL及其用戶分配網絡訪問權限,指定其可以訪問的主機和端口,其中host變量可以是IP地址或者域名,也可以使用通配符匹配一段網段。同時也可以多次調用 assign_acl為同一個ACL和其所含用戶授權訪問多個host主機和端口號。

5 總結

在本文中我們利用存儲過程和觸發器,在數據表發生變化時主動調用UTL_HTTP包訪問數據庫服務器外部的網站,并通過HTTP協議傳遞出相關內容,使消息可以第一時間發送到微信客戶端,避免了輪詢過程對雙方系統的額外開銷。該方法還是個非常適用于通過 POST方法將格式數據發送到通信運營商所提供的短信發送接口,實現全自動的短信提醒功能。除了 UTL_HTTP包外,Oracle 11g還提供了UTL_TCP、UTL_MAIL來實現數據庫對外的socket連接功能和對外發送郵件功能,同樣可以實現本文類似的主動推送功能。另外Microsoft SQL Server和其它主流數據庫軟件均具有類似的存儲過程、觸發器和HTTP訪問機制,有待大家參考和利用。

[1] 馬洪江,周相兵.基于存儲過程的科研績效統計分析系統的實現[J].計算機技術與發展, 2011,21(8)181-184.

[2] 郭紹忠,甄濤,賈琦.基于存儲過程的海量郵件數據挖掘[J].計算機工程, 2010,36(1):40-42.

[3] Database PL/SQL Packages and Types Reference. Chapter 225 UTL_HTTP[EB/OL].[2016-03-02],http://docs.oracle. com/cd/E11882_01/appdev.112/e40758/u_http.htm#ARPL S070.

[4] 林樹澤, 盧芬, 柳冬青. Oracle DBA高可用、備份恢復與性能優化[M].北京:清華大學出版社,2015.

[5] Michael McLaughli.Oracle Database 11g PL/SQL程序設計 [M].張云,等譯.北京:清華大學出版社,2009.

[6] 微信公眾平臺企業號接口文檔[EB/OL].[2016-03-02] http://qydev. weixin.qq.com/wiki/.

Implementation of Message Push System Based on the Stored Procedure and HTTP Protocol

Xia Lingyun, Gong Wentao
(Internet and Education Technology Center, China University of Petroleum (East China), Qingdao 266580, China)

Stored procedures and triggers in database are formerly used for data integrity checking and complex rule restriction, they also provide an actively operating mechanism when the data change in the database table. Oracle Database also provides UTL_HTTP package to achieve the access from database to external WEB server. Using these two characteristics, it can send the changing data to an external service server initiatively and promptly, and then sends the message to the appropriate user through the service server. Thereby avoiding external service systems avoid frequent reading the database server initiatively, it improves messaging system efficiency and reduces the burden on system queries

Stored procedure; Trigger; Message push; Oracle; UTL_HTTP

TP393

A

1007-757X(2016)11-0066-03

2016.07.06)

夏凌云(1980-)男,瀘州人,中國石油大學(華東),網絡及教育技術中心,碩士研究生,工程師,研究方向:互聯網技術、計算機軟

硬件技術和物聯網技術,青島 266580

龔文濤(1984-)男,潛江人,中國石油大學(華東),網絡及教育技術中心,碩士,工程師,研究方向:網絡信息安全,青島 266580

猜你喜歡
數據庫微信用戶
微信
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
微信
微信
主站蜘蛛池模板: 欧美专区在线观看| 国产欧美视频在线| 国产欧美日韩视频一区二区三区| 亚洲第一视频区| 亚洲美女一区二区三区| 2021国产精品自拍| 精品人妻一区二区三区蜜桃AⅤ| 免费中文字幕在在线不卡| 国产丝袜啪啪| 伊人久久综在合线亚洲91| 亚洲欧美自拍中文| 九色视频在线免费观看| 日本不卡视频在线| 中文字幕欧美日韩| 99在线观看免费视频| 激情无码视频在线看| AV在线麻免费观看网站| 久久精品人妻中文系列| 99精品国产电影| 国产精品手机视频一区二区| 国产激情无码一区二区三区免费| 国产成人超碰无码| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲娇小与黑人巨大交| 91久久国产综合精品女同我| 日韩精品一区二区深田咏美| 日日拍夜夜嗷嗷叫国产| 日韩无码视频专区| 免费久久一级欧美特大黄| 国产精品尤物在线| 人妻中文久热无码丝袜| 精品91自产拍在线| 97国产精品视频自在拍| 波多野结衣一区二区三视频 | 欧美激情二区三区| 国产三级韩国三级理| 国产美女久久久久不卡| 国产亚洲精品精品精品| 国产激情在线视频| 成人福利免费在线观看| 丰满的少妇人妻无码区| 中日韩欧亚无码视频| 中国丰满人妻无码束缚啪啪| 日韩亚洲综合在线| 色偷偷综合网| 日韩麻豆小视频| 亚洲视频四区| 国产国模一区二区三区四区| 国产成人亚洲精品蜜芽影院| 国产精女同一区二区三区久| 日韩精品高清自在线| 久久国产亚洲欧美日韩精品| 亚洲高清日韩heyzo| 精品無碼一區在線觀看 | 韩国福利一区| 日韩高清一区 | 久久久久久久久久国产精品| 国产亚洲精品97AA片在线播放| 在线观看无码av免费不卡网站| 精品偷拍一区二区| 素人激情视频福利| 欧美日在线观看| 国产99视频在线| 亚洲丝袜第一页| 午夜国产精品视频| 天堂va亚洲va欧美va国产| 色综合久久88| 久久女人网| 国产成人a毛片在线| 国产精品亚洲专区一区| 国产精品福利导航| 亚洲无卡视频| 国产小视频a在线观看| 亚洲一区二区三区麻豆| 亚洲成年人片| 香蕉久人久人青草青草| 午夜a视频| 国产精品无码在线看| 中文字幕在线观| 中文一级毛片| 亚洲AV无码久久精品色欲| 欧美翘臀一区二区三区|