也许这可以在没有StreamInsight的情况下完成,但我很好奇。
我有一个用“消息”填充表格的应用程序(在表格中插入一行)。
我想创建一个监控应用程序,监控此表以显示消息“到达”的速率,以及它们“处理”的速度(标记更新)。
由于这是供应商应用程序,我不想放入触发器或任何东西。但是我可以查询数据库,并且表中有一个使用标识列的PK。
如何进入跳跃窗口查询?我希望在过去的30分钟内显示一条线图,显示邮件的进入速度,以及邮件处理速度。
答案 0 :(得分:1)
根据此消息表中捕获的信息,我认为您可以通过运行SQL查询来更快地完成此操作。
如果您仍想使用StreamInsight执行此操作,可以使用以下代码来帮助您入门。
var app = Application;
var interval = TimeSpan.FromSeconds(1);
var windowSize = TimeSpan.FromSeconds(10);
var hopSize = TimeSpan.FromSeconds(1);
/* Replace the Observable.Interval with your logic to poll the database and
convert the messages to instances of TPayload. It just needs to be a class
that implements the IObservable<TPayload> interface. */
var observable = app.DefineObservable(()=> Observable.Interval(interval));
// Convert the observable to a point streamable.
var streamable = observable.ToPointStreamable(
e=> PointEvent.CreateInsert(DateTimeOffset.Now, e),
AdvanceTimeSettings.IncreasingStartTime);
/* Using the streamable from the step before, write your actual LINQ queries
to do the analytics you want. */
var query = from win in streamable.HoppingWindow(windowSize, hopSize)
select new Payload{
Timestamp = DateTime.UtcNow,
Value = win.Count()
};
/* Create a sink to output your events (WCF, etc). It just needs to be a
class that implements the IObserver<TPayload> interface. The
implementation is highly dependent on your needs. */
var observer = app.DefineObserver(()=> Observer.Create<Payload>(e => e.Dump()));
query.Bind(observer).Run();