Esper的POJO事件处理

       最近也在忙于公司产品的报警模块的功能开发,主要用到的就是esper事件处理引擎。关于Esper的理解见博客《对Esper的理解》,这几篇博客也说说esper支持的几种事件类型。这篇博客介绍一下关于POJO对象事件的支持。

 

       POJO对象的概念就不再赘述了,具体见POJO百科

       Esper对于POJO的支持是有一些要求,即对每一个POJO的私有属性必须有getter方法,具体的POJO对象见下面的代码,

public class Apple {

	private int id;
	private int price;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

}

      有了POJO类之后,需要做的操作就是打开Esper的事件监听,并且要完成具体POJO对象的EPL语句,具体的代码如下:


public class AppleListener implements UpdateListener {

	@Override
	public void update(EventBean[] newEvents, EventBean[] oldEvents) {
		if (newEvents != null) {
			Double avg = (Double) newEvents[0].get("avg(price)");
			System.out.println("Apple's average price is " + avg);
		}
	}
}
String product = Apple.class.getName();
String epl = "select avg(price) from " + product
				+ ".win:length_batch(3)";

      有了这两个关键的代码之后,就需要进行测试引擎执行POJO事件了。这时候我们需要将几个POJO类实现,并且将POJO对象传入到引擎中,


EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();

EPAdministrator admin = epService.getEPAdministrator();

EPStatement state = admin.createEPL(epl);
state.addListener(new AppleListener());

EPRuntime runtime = epService.getEPRuntime();

Apple apple1 = new Apple();
apple1.setId(1);
apple1.setPrice(5);
runtime.sendEvent(apple1);

Apple apple2 = new Apple();
apple1.setId(2);
apple1.setPrice(2);
runtime.sendEvent(apple2);

Apple apple3 = new Apple();
apple1.setId(3);
apple1.setPrice(5);
runtime.sendEvent(apple3);

       之后执行就能输出一下的结果:

       其实Esper事件处理引擎是非常简单的,开启引擎,加载相应的EPL语句进行监听,如果有POJO对象进来就会进行EPL语句执行,如果符合条件就会输出。只要能够把EPL语句写好,基本上Esper引擎也就会用了。下一篇介绍POJO对象嵌套事件的处理。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值