本發(fā)明涉及計算機通訊領(lǐng)域。
背景技術(shù):
在大型的生產(chǎn)管理系統(tǒng)中,各子系統(tǒng)之間存在著大量的信息交換。目前常用做法是通訊雙方按事先約定各自開發(fā)基于TCP協(xié)議的通訊程序。不但程序開發(fā)工作量大,維護量也大,只要通訊內(nèi)容有調(diào)整,雙方程序都要修改。對一個大型系統(tǒng)而言,開發(fā)成本和維護成本巨大。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是實現(xiàn)一種基于數(shù)據(jù)庫中間表的標準的通訊方法,并且能夠降低系統(tǒng)的開發(fā)成本和維護成本。
為了實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案為:基于數(shù)據(jù)庫中間表的數(shù)據(jù)通訊方法:
發(fā)送方系統(tǒng)數(shù)據(jù)庫建立發(fā)送中間表,接收方系統(tǒng)數(shù)據(jù)庫建立接收中間表;
當所述發(fā)送方系統(tǒng)發(fā)送一條報文時,發(fā)送方系統(tǒng)在發(fā)送中間表插入一條記錄;
發(fā)送方系統(tǒng)周期性的掃描找出發(fā)送狀態(tài)為剛生成的記錄;
將找出的記錄插入接收方系統(tǒng)的接收中間表;
將成功插入接收方系統(tǒng)的記錄的發(fā)送狀態(tài)改寫已被接收。
所述發(fā)送中間表包括:序號、生成時間、發(fā)送狀態(tài)、接收時間、報文頭、報文體,其中發(fā)送狀態(tài)為剛生成或已被接收;所述接收中間表包括序號,接收時間,報文頭,報文體。
所述報文體為通訊雙方約定的由通訊內(nèi)容組成的字符串。
所述發(fā)送方系統(tǒng)在發(fā)送中間表插入一條記錄包含:序號,生成時間,發(fā)送狀態(tài),報文頭,其中發(fā)送狀態(tài)為剛生成。
改寫記錄的發(fā)送狀態(tài)為已被接收的同時設(shè)置接收時間。
如果發(fā)送方系統(tǒng)和接收方系統(tǒng)中任一個統(tǒng)數(shù)據(jù)庫連接斷開,程序?qū)⒘砥鹁€程,周期性的嘗試恢復(fù)同斷開數(shù)據(jù)庫的連接,一旦連接正常,繼續(xù)通訊功能。
本發(fā)明源端和目標端的數(shù)據(jù)庫連接信息、表名都可在配置文件中編輯。程序具備極高的健壯性,當任何一個數(shù)據(jù)庫從故障恢復(fù)時,程序自動恢復(fù)通訊,這樣的系統(tǒng)能夠有效的降低研發(fā)成本和維護成本。
具體實施方式
本發(fā)明通訊方法對任意的一組通信(系統(tǒng)A→系統(tǒng)B),只需部署本通訊程序,并配置數(shù)據(jù)庫連接和表名即可,無任何開發(fā)和維護工作量。
假定系統(tǒng)A需要向系統(tǒng)B發(fā)送信息,系統(tǒng)A在其數(shù)據(jù)庫中創(chuàng)建發(fā)送中間表Send_Table,該表包含以下字段:序號(關(guān)鍵字),生成時間,發(fā)送狀態(tài)(0=剛生成,1=已被接收),接收時間,報文頭,報文體共6個字段。所謂報文體,是指通訊雙方約定的由通訊內(nèi)容組成的字符串。
系統(tǒng)B在其數(shù)據(jù)庫中創(chuàng)建接收中間表Recive_Table,該表包含以下字段:序號(關(guān)鍵字),接收時間,報文頭,報文體共4個字段。
程序啟動時首先讀取配置文件,以獲取應(yīng)用程序連接兩個數(shù)據(jù)庫的連接字符串,以及發(fā)送中間表和接收中間表的表名。
假定系統(tǒng)A向系統(tǒng)B發(fā)送一條報文,系統(tǒng)A往Send_Table插入一條記錄,其中必須包含序號,生成時間(當前時間),發(fā)送狀態(tài)(0),報文頭,報文體共5個字段。
本通訊程序周期性地掃描Send_Table中發(fā)送狀態(tài)=0的記錄,并將其插入系統(tǒng)B的接收中間表Recive_Table。在成功插入后改寫Send_Table中該記錄的發(fā)送狀態(tài)為1,同時設(shè)置接收時間。
既避免報文重復(fù)發(fā)送,同時也讓發(fā)送方知道該報文已被接收。如果通訊程序同任一系統(tǒng)數(shù)據(jù)庫連接斷開,程序?qū)⒘砥鹁€程,周期性地嘗試恢復(fù)同斷開數(shù)據(jù)庫的連接,一旦連接正常,繼續(xù)通訊功能。