( 从2012年12月6日更新第二 -新的协议,一个sligtly不同视图)
现在的问题是,是否下面的解决方案似乎是合理的你,或是否存在,我没有注意到(是相当新的SQL Server Service Broker的)任何瑕疵...
我想继续在提出问题的分析SQL服务代理:从分布源收集数据 。 我想重点放在协议的问题从卫星SQL服务器收集数据时被使用。 SQL Server服务代理的使用是必须的 - 它是由这里就不介绍其他的原因也决定。 所以,请,不建议完全替代解决方案。
我想重点应该做些什么以及怎样使用Service Broker的自然(最好的方式)的确切问题。 总的目标是在上面提到的问题提出 。 图片第一:
要考虑现在,更多详细信息...
插件架构通缉
卫星机都与真实的物理生产线。 它可以发生一些机器加入到技术过程中,有些机器可以消失,有的机器可以将使用同一条生产线的认同感所取代,但它在物理上是不同的 - 即它的SQL服务器是不同的实例。
中央服务器一无所知,直到卫星它得到来自它的邮件。 还有就是卫星服务器没有统一的数据库。 没有什么,有多少卫星SQL服务器将被列入该系统的知识。 它总是决定了卫星站点。
与收集数据的任何活动应该由卫星机生成的事件来启动。
重要提示:我们的目标是不断地传输所有新创建的数据(来自传感器),以及发现和解决辍学-独立于任何可能会导致他们。
给你具体的例子:
由行号3(黄色)所确定的机器最近添加到环境中。 它的SQL Server Express的推出,并开始收集传感器数据(第三方解决方案,专用表具有特殊结构)。 本机没有连接到中央服务器,但。
的唯一配置的就是生产线(此处为3)的可靠分配固定识别,并且所有的细节neccessary连接到中央SQL服务器。 但是,中央SQL服务器不知道的信息。 中央才刚刚准备从任何新的烃源接受数据,但从来不知道什么时候。 (它已经测试了一台机器使用瑞摩斯Rusanu答案建议的方法的问题SQL服务代理-一个中心SQL多卫星SQL ... 。)
这件作品的SQL软件是3只是有点以后部署的机器上。 它开始与中央谈。 该卫星的部分是不哑,但其自身的活性是每当新的记录被插入到传感器数据表(见上述第1点)发送传感器数据。 从记录,UTC时间的计算(从专有格式),若干传感器数据从一个记录被转换成相同数量的归一化的记录(格式化为一个XML消息),并且发送给中央SQL服务器。
中央通过与来自卫星机发送的传感器数据的消息激活。 物理连接的故障是业务代理队列掩盖。
一个合理的时间间隔(在此一小时)后,中央服务器检查是否迄今收集的数据应被处理或不。 有工作单元,需要一些生产时间,和数据应被处理并添加到该单元的文档。 该单元结束时,处理应该只发生。
中央还将检查是否具有为单位的所有数据。 由于传感器采样中已知的有规律的间隔(在此约1分钟)完成,中央能检查是否有一些中途退出 。 还存在一个初始“滴出”,用于当经由卫星SSB未连接到中央的时间间隔。 该机制应来自任何情况中恢复。 它也可能发生的是没有收集的传感器,其中乱序或数据。 检测到的辍学在中央可能实际上意味着中央问:“我没有从你的数据在这个时间间隔给我发送一些人如果存在,或者告诉我,他们不存在。”
卫星应该发送可在采样时间之间只发送如此多的数据。 从辍学的复苏可能相当缓慢。 在中央服务器处理该数据的延迟不是关键的。 然而,中央应该知道当数据准备好(或所检测的时间间隔不存在)。
一些画面,更多的解决方案细节
我所选择的“回收会话”由瑞摩斯Rusanu作为用于卫星和中心之间的通信的基本框架。 它定义了EndOfStream
消息类型以表示该会话句柄应该被丢弃,而新的应该被使用。 寿命被由服务代理定时器产生的上述的一个小时的时间间隔所限制。
该消息是在中央服务器中使用也为数据处理的活化(MIS)。 大约在同一时间,为辍学中央检查。 中央保持低于地方已经检查了辍学的时间。 这样,它知道什么数据已准备好进行处理。
你认为该方案是否合理? 你可以看到它的任何问题?
(我要细化问题,以反映您的建议。)
感谢您的时间和经验,并有一个愉快的一天。
切赫