d逗比 2019-11-21 20:03 采纳率: 0%
浏览 223
已结题

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

前言

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 和监听,但是因为系统中 规则也比较多 如果执行这个操作,第一对性能有影响,第二是实时分析的数据会有一段时间会断掉。大家有没有遇到这种情况,该如何解决??

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
    • ¥20 matlab yalmip kkt 双层优化问题
    • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
    • ¥88 实在没有想法,需要个思路
    • ¥15 MATLAB报错输入参数太多