WEB开发网
开发学院数据库MSSQL Server StreamInsight 浅入浅出(三)—— 适配器 阅读

StreamInsight 浅入浅出(三)—— 适配器

 2010-09-27 00:00:00 来源:WEB开发网   
核心提示: 其中 TextFileReaderConfig 是适配器的配置信息类型,每个通过此适配器工厂生成的适配器都会被该类型的实例配置,StreamInsight 浅入浅出(三)—— 适配器(3),而且由于配置信息需要使用 DataContractSerialization 进行序列化,所以配置信息类型

其中 TextFileReaderConfig 是适配器的配置信息类型,每个通过此适配器工厂生成的适配器都会被该类型的实例配置。而且由于配置信息需要使用 DataContractSerialization 进行序列化,所以配置信息类型的各字段必须是基本类型或者通过 DataContract 特性标识。

工厂中的两个方法 Create 和 Dispose 是 IInputAdapterFactory 接口需要的,也是所有其他三个适配器工厂接口所要求的。在查询启动时,会调用 Create 方法,针对不同的事件模型生成相对应的适配器。而在查询关闭时,会调用适配器工厂的 Dispose 方法。

此外的 DeclareAdvanceTimeProperties 方法则由 IDeclareAdvanceTimeProperties 接口申明。通过返回一个 AdvanceTimeSettings 类型的对象,控制 CTI 事件的产生频率和时间戳延迟策略。具体可以查看 AdvanceTimeSettings 类的说明 http://msdn.microsoft.com/en-us/library/ff518491.aspx

适配器的状态机

这无疑是适配器中最重要的一部分,只有理解了适配器和服务器之间的状态转化,才能明白适配器的工作原理:

这里中文版可以理解各个状态以及转换的意义,而英文版可以直接和方法名以及状态名对应上。具体的解释可以参见 http://technet.microsoft.com/en-us/library/ee378877.aspx 下面的说明。这里依然只是做一些补充:

无论对于何种类型的适配器,上图,也就是状态机是一致的。

需要由适配器实现的方法只有 Start 和 Resume,另外还有一个图中没有显示的 Dispose 方法。一般来说,为了避免阻塞 I/O 在 Start 和 Resume 中会以单独线程执行相应的操作,而且这两个方法往往是同样的实现。

Enqueue、Dequeue、Ready 和 Stopped 方法由适配器调用,但实际是由服务器提供的,用于提示服务器适配器的状态改变。而 Start 和 Resume 方法由适配器实现,但不会在适配器内部被调用。

适配器调用 Ready 方法后就会由服务器调用 Resume 方法。

要注意在某些状态下,调用不想关的方法,比如在“Stopped”状态下调用 Ready 方法,会触发异常。

由于可以由服务器异步发起停止查询的命令,从而令适配器处于 Stopping 的状态下。所以需要在适配器内部检查当前的状态,也就是在 Start 和 Resume 中检查当前状态是否为 Stopping 。

上一页  1 2 3 

Tags:StreamInsight 适配器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接