对于Esper比较详细的教程基本都是Java版本的,通过个人几天的努力,终于实现了.Net版本的,下边是具体代码,原理就不详细介绍了,仅供大家参考和学习。
public class ObjectEvent
{
public String itemName;
public double price;
public ObjectEvent(String itemName, double price)
{
this.itemName = itemName;
this.price = price;
}
public String GetItemName()//命名规则必需正确,大小写不对会导致错误
{
return itemName;
}
public double GetPrice()
{
return price;
}
}
事件发送类
class EventSender
{
private static EPServiceProvider epService = EPServiceProviderManager.GetDefaultProvider();
static public void objectEventSend()
{
Configuration config = new Configuration();
EPServiceProvider epService = EPServiceProviderManager.GetDefaultProvider();
String epl =
"select *,sum(Price) from ConsoleApplicationNesper.ObjectEvent.win:length(2)";
EPStatement statement = epService.EPAdministrator.CreateEPL(epl);
statement.Events += EventListener.objectEventHandle;
ObjectEvent e = new ObjectEvent("shirt", 74.50);
Console.WriteLine("send shirt:74.50");
epService.EPRuntime.SendEvent(e);
ObjectEvent e1 = new ObjectEvent("shoes", 60.50);
Console.WriteLine("send shoes:60.50");
epService.EPRuntime.SendEvent(e1);
ObjectEvent e2 = new ObjectEvent("coat", 70.50);
Console.WriteLine("send coat:70.50");
epService.EPRuntime.SendEvent(e2);
Console.ReadKey();
}
}
事件监听类
class EventListener
{
static public void objectEventHandle(Object sender, UpdateEventArgs e)
{
EventBean eventResult = e.NewEvents[0];
Console.WriteLine("sumPrice:" + eventResult.Get("sum(Price)"));
Console.WriteLine("received: " + eventResult.Get("ItemName") + ":"
+ eventResult.Get("Price"));
//Console.ReadKey();
}
}
运行结果
1---object event example
send shirt:74.50
sumPrice:74.5
received: shirt:74.5
send shoes:60.50
sumPrice:135
received: shoes:60.5
send coat:70.50
sumPrice:131
received: coat:70.5
okay,至此,所有工作完成。