zoukankan      html  css  js  c++  java
  • 通过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

  • 相关阅读:
    如何改变拖动时鼠标悬浮样式
    Nginx的server为0.0.0.0/0.0.0.1的作用?
    redis的lua脚本拓展,返回nil及其判断
    lua异常捕获
    nginx配置及常见问题
    centos安装postgresql-10及操作
    23种设计模式
    php的function() use($args)用法
    lua中self.__index = self是什么意思?
    lor实践
  • 原文地址:https://www.cnblogs.com/aiwz/p/6154631.html
Copyright © 2011-2022 走看看