Esper map EventType热加载问题。 在删除或者修改字段时如何解决?? 45C

前言

Esper 的事件类型有三种,分别是 对象、Map 、数组
官方推荐使用对象,宣称处理对象速度会更快。但是在有些复杂事件分析的场景,事件中的字段是可以用户自定义的。
这时候使用Map 就可以 热更新其类型。主体代码如下:

EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();
EPAdministrator admin = epService.getEPAdministrator();

Map \<String, Object> eventTypeMap = new HashMap \<>();
eventTypeMap.put("name", String.class);
eventTypeMap.put("age", int.class);

admin.getConfiguration().addEventType("Person", eventTypeMap);

String epl = "select * from Person";
EPStatement state = admin.createEPL(epl);
state.addListener(((newEvents, oldEvents) \-> {
        for (EventBean eventBean : newEvents) {
                System.out.println(Arrays.asList(eventBean.getEventType().getPropertyNames()));
                System.out.println(Arrays.asList(eventBean.getEventType().getPropertyType("age")));
        }
}));

EPRuntime runtime = epService.getEPRuntime();
//发送一个对象 ....
runtime.sendEvent(....., "Person");

//现在在Person Map事件对象中添加一个address 属性
eventTypeMap.put("address", String.class);
// 更新类型
//admin.getConfiguration().updateMapEventType("Person", eventTypeMap);

//再发送一个对象 ....
runtime.sendEvent(....., "Person");

以上程序运行结果为

[name, age]
[class java.lang.Integer]
[name, age, address]
[class java.lang.Integer]

这些都在预想之中

问题:无法对类型属性修改和删除

上网查阅资料,发现是无法对map对象属性的修改和删除的。
目前比较蠢的方案是,注销所有的 statement 移除类型。重新添加类型,重新创建statement 和监听,但是因为系统中 规则也比较多 如果执行这个操作,第一对性能有影响,第二是实时分析的数据会有一段时间会断掉。大家有没有遇到这种情况,该如何解决??

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐