我正在观察StreamInsight应用程序中非常奇怪的事件处理。 有一个InputAdapter将Stream分成TumblingWindows。然后我有多个查询同时运行。他们应该使用来自同一个Stream的所有相同的TumblingWindows。我使用此代码来定义窗口:
var atgs = new AdvanceTimeGenerationSettings(config.Input.EventCount,
TimeSpan.FromSeconds(config.Input.Delay), true);
var ats = new AdvanceTimeSettings(atgs, null, AdvanceTimePolicy.Adjust);
var dstream = CepStream<Dataclass>.Create("Data Input Stream", typeof (InAdapterFactory),
config.Input, EventShape.Point, ats);
var unfilteredtumbling = dstream.TumblingWindow(TimeSpan.FromSeconds(processinginterval),HoppingWindowOutputPolicy.ClipToWindowEnd);
然后我从这个流中执行两个不同的查询。使用此代码:
var count = from row in unfilteredtumbling
select new
{
value= row.Count(),
qind = 10,
stat = "Calculated Count"
};
var count2 = from row in unfilteredtumbling
select new
{
value= row.Count()*2,
qind = 10,
stat = "Calculated Count2"
};
将每个绑定到他们自己的OutputAdapter,如下所示:
Query querycount = count.ToQuery(myApplication, "Count Output Query", "Output Count",
typeof (OutputAdapterFactory), config.Output, EventShape.Point, StreamEventOrder.FullyOrdered);
Query querycount2 = count2.ToQuery(myApplication, "Count Output Query2", "Output Count2",
typeof (OutputAdapterFactory), config.Output, EventShape.Point, StreamEventOrder.FullyOrdered);
以下链接显示我收到的输出。
https://dl.dropboxusercontent.com/u/15482726/outputissue.jpg
遗憾的是,我收到的输出并不是我所期望的。 看起来每个查询都有自己的inputadapter。消息将分发给两个输入适配器。即使dstream仅创建一次,但工厂被调用两次。但是为什么以及何时?怎么可能?如果我只使用一个查询,一切都很完美。
我使用了此链接中的说明http://technet.microsoft.com/en-us/library/ff518536.aspx 认为它应该这样工作。
非常欢迎任何帮助。
最好的问候乔
答案 0 :(得分:1)