现在的位置: 首页 > 综合 > 正文

Esper处理Map事件

2014年04月04日 ⁄ 综合 ⁄ 共 1831字 ⁄ 字号 评论关闭

      上篇博客介绍了如何利用esper进行POJO嵌套事件的监听处理操作,这篇来说一下Map事件监听和处理。

 

      如果esper要进行的事Map事件那么首先是需要建立Map对象的。具体的建立方法如下,

Map<String,Object> person=new HashMap<String,Object>();
person.put("name", String.class);
person.put("age", int.class);
person.put("children", List.class);
person.put("phones", Map.class);
		
admin.getConfiguration().addEventType("Person",person);

       通过addEventType方法来进行事件注册,这时候事件名称为Person,这个和POJO对象事件其实是一样的,只是POJO对象为对象名称,这里用户可以自定义事件名。这时候用户书写EPL语句的时候from后面就是需要跟着Person。

 

      具体的EPL语句就可以如下一样,

String epl = "select age,children from Person where name='cjq'";

      其他的开启引擎和传入事件操作和前两篇博客一样

public static void main(String[] args) {
		EPServiceProvider epService=EPServiceProviderManager.getDefaultProvider();
		EPAdministrator admin=epService.getEPAdministrator();
		
		Map<String,Object> person=new HashMap<String,Object>();
		person.put("name", String.class);
		person.put("age", int.class);
		person.put("children", List.class);
		person.put("phones", Map.class);
		
		admin.getConfiguration().addEventType("Person",person);
		
		
		String epl = "select age,children from Person where name='cjq'";
		
		
		
		EPStatement state = admin.createEPL(epl);
		state.addListener(new PersonMapListener());
		EPRuntime runtime = epService.getEPRuntime();
		
		Map<String,Object> person1=new HashMap<String,Object>();
		
		List<String> children=new ArrayList<String>();
		children.add("x");
		children.add("y");
		children.add("z");
		
		Map<String,Integer> phones=new HashMap<String,Integer>();
		
		phones.put("a", 123);
		phones.put("b", 234);
		
		person1.put("name","cjq");
		person1.put("age",12);
		person1.put("children", children);
		person1.put("phones", phones);
		
		runtime.sendEvent(person1, "Person");
		
	}

      之后完成监听代码为

class PersonMapListener implements UpdateListener {

	@Override
	public void update(EventBean[] newEvents, EventBean[] oldEvents) {
		if (newEvents != null) {
			Integer age = (Integer) newEvents[0].get("age");
			System.out.println("age is:"+age);
		}
	}

}

      此时运行之后会输出下面的结果,

      通过这三篇博客已经对esper的事件处理有一定的认识了,其实很简单的,就是开启引擎,编写事件代码,编写监听代码三步足矣。

抱歉!评论已关闭.