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条回答

    报告相同问题?

    悬赏问题

    • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
    • ¥15 微信会员卡接入微信支付商户号收款
    • ¥15 如何获取烟草零售终端数据
    • ¥15 数学建模招标中位数问题
    • ¥15 phython路径名过长报错 不知道什么问题
    • ¥15 深度学习中模型转换该怎么实现
    • ¥15 Stata外部命令安装问题求帮助!
    • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
    • ¥15 如何用python向钉钉机器人发送可以放大的图片?
    • ¥15 matlab(相关搜索:紧聚焦)