通過BizTalk WCF適配器實現異構數據庫/系統間的數據同步

概述

 

數據庫與數據庫之間的同步,是EAI(企業應用整合)非常普遍的需求,BizTalk作爲企業ESB平臺,以SOA的架構方式來實現異構系統之間的整合,今天我們就來介紹如何使用BizTalk的適配器來實現數據庫與數據庫之間的數據同步。

在本篇文章當中,我以SQL Server到SQL Server之間同步來舉例,用到了BizTalk的WCF-SQL適配器。

在這裏說明一下,若需要與其他數據庫進行同步,如SQL Server到Oracle、Oracle到IBM DB2的實現方式大體相同,只是所選用的適配器與連接配置有少許不同而已。

簡單步驟我就直接用文字來描述了,之前的很多文章貼過簡單步驟的貼圖,在這裏只把關鍵步驟的截圖貼出來,廢話不多說,直接切入正題。

 

示例程序

 

場景介紹

場景非常簡單,我們要實現的就是將源表中的3條數據通過BizTalk導入到目標表當中。

使用WCF-SQL獲取源數據表中的信息

  • 在Visual Studio 2010中創建BizTalk解決方案,並命名爲SQL_TO_SQL;
  • Add Generated Items選擇Consume Adapter Service點擊Add;
  • 選擇sqlBinding並點擊右邊的Configure按鈕;
  • Security選項卡中,選擇SQL Server的安全認證方式,在這裏我們用Username認證方式,填寫用戶名和密碼;
  • URI Properties選項卡中配置ServerlocalhostInitialCatalog爲數據庫TestDBInboundIdTestID
    說明一下InboundId,在這裏我們採用輪詢的方式來獲取SQL源數據表當中的數據,選擇這種方式我們必須指定InboundId來確保命名空間是唯一的,這個InboundId不能與其他的項目中的InboundId重複。
  • Binding Properties選項卡中,配置InboundOperation Type選擇TypedPollingPolledDataAvailable StatementSELECT COUNT(1) FROM Source_TablePollingStatementSELECT Source_ID,Source_Name,Source_Time FROM Source_Table;
    InboundOperationType – 屬性有幾種類型可選:Polling,TypedPolling,Notification。
    Polling是輪詢方式,但是這種方式是不帶架構的,TypedPolling也是輪詢方式,這種方式可以帶出架構。Notification是用於數據有變化時進行相關通知。
    如果需要輪詢數據,又要能刷出數據架構,需要採用TypedPolling方式。
    PollingIntervalInSecond – 輪詢間隔時間。
    PolledDataAvailableStatement – 執行輪詢的條件,這裏一般是個select語句,這條語句應該返回一個單個的結果集,只要這個結果集的第一行第一列必須有值(如果是空結果集會報錯),應該是個大於等於0的整數值。如果這個值大於0則執行下面PollingStatement指定的SQL命令真正的開始輪詢的操作。如果這個值等於0,則輪詢語句不執行。
    PollingStatement – 輪詢命令,可以是SQL語句,也可以是存儲過程。


  • Select Contract type中選擇Service (Inbound operations),並選擇TypedPolling


  • 可以看到在項目中生成了2個文件,1個是根據前面設置的輪詢命令生成的Schema,1個是可以導入到BizTalk的接收位置和端口的XML綁定文件;

使用WCF-SQL向目標數據表插入數據

  • Add Generated Items選擇Consume Adapter Service點擊Add;
  • 選擇sqlBinding並點擊右邊的Configure按鈕;
  • Security選項卡中,選擇SQL Server的安全認證方式,在這裏我們用Username認證方式,填寫用戶名和密碼;
  • URI Properties選項卡中配置ServerlocalhostInitialCatalog爲數據庫TestDBInboundIdTestID
  • Binding Properties選項卡中我們不需要配置TypedPolling,應當將其恢復爲初始狀態;


  • 配置好之後選擇Tables當中的Destination_Table表並添加Insert操作,在Filename Prefix處可爲其設置命名前綴,這個地方不是必須填的,但是我們在這裏將其設置爲INSERTDES以保證文件命名更加整潔;


  • 配置完成後,可以看到在項目中生成了4個文件,3個是根據前面設置的Insert命令生成的Schema,1個是可以導入到BizTalk的接收位置和端口的XML綁定文件;
  • 對該解決方案進行編譯。

創建並配置BizTalk業務流程

  • 添加BizTalk Orchestration文件並將其命名爲Orchestration_SQLtoSQL
  • Orchestration View中右鍵Messages->New Message添加消息,將其命名爲Msg_GetData,並設置Message TypeSQL_TO_SQL.TypedPolling_TestID.TypedPolling


  • 按照上述方法創建另一個消息,命名爲Msg_SendData,將Message Type設置爲SQL_TO_SQL.INSERTDESTableOperation_dbo_Destination_Table.Insert


  • 創建好接收消息和發送消息之後,按照如下圖所示搭建業務流程並配置數據表之間的映射關係;




部署並配置BizTalk應用程序

  • 右鍵BizTalk解決方案對其進行部署,發佈到BizTalk管理控制檯當中,在控制檯當中找到所發佈的BizTalk的應用程序,右鍵點擊Configure...
  • Host選擇BizTalkServerApplication
  • 配置接收端口
  • 將接收端口命名爲GetSQLPort,並新建接收位置,配置其接收位置爲WCF-SQL適配器,接收管道選擇XMLReceive
  • 在WCF-SQL右側點擊Configure...配置適配器屬性,配置內容與在Visual Studio中需保持一致,ServerlocalhostInitialCatalogTestDBInboundIdTestID,最後生成的URI爲mssql://localhost//TestDB?InboundId=TestID
  • Binding選項卡中的配置見Visual Studio中接收端口的配置;
  • Other選項卡中選擇User account方式來配置登陸信息;
  • 配置發送端口
  • 將發送端口命名爲SendSQLPort,選擇WCF-SQL適配器,發送管道使用默認的PassThruTransmit,同樣點擊Configure...來配置WCF-SQL適配器;
  • 在這裏要注意,發送端口不用配置InboundId這一項,生成的URI最終應爲mssql://localhost//TestDB?纔是正確的;
  • Binding選項卡中暫不做任何配置;
  • Credentials選項卡中配置數據庫登錄信息,並且該登錄用戶必須擁有目標數據表的寫權限
  • 配置完成後點擊OK並啓動BizTalk應用程序,其運行結果如下圖所示,至此我們已經成功地將源數據表中的數據導入到目標表當中了,這裏我們設置的輪詢時間間隔爲30秒一次,可根據業務需求作出相應的配置,並且該Demo不僅僅侷限於SQL到SQL之間的同步,若想與其他數據庫同步,則在配置時選用其它數據庫的適配器即可,如:WCF-OracleDB

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章