博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
esper(4-3)-Non-Overlapping Context
阅读量:4308 次
发布时间:2019-06-06

本文共 2402 字,大约阅读时间需要 8 分钟。

语法

create context context_name start start_condition end end_condition

如:

// 9点到17点此context才可用(以引擎的时间为准)。如果事件进入的事件不在此范围内,则不受该context影响create context NineToFive start (0, 9, *, *, *) end (0, 17, *, *, *)

 

例子

import com.espertech.esper.client.*;/** * @author yaoyuan2 * @date 2019/3/26 */public class NoOverLappingContextTest {    public static void main(String[] args) {        EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();        EPAdministrator admin = epService.getEPAdministrator();        EPRuntime runtime = epService.getEPRuntime();        String start = StartEvent.class.getName();        String end = EndEvent.class.getName();        String other = OtherEvent.class.getName();        // 以StartEvent事件作为开始条件,EndEvent事件作为结束条件        String epl1 = "create context NoOverLapping start " + start + " end " + end;        String epl2 = "context NoOverLapping select * from " + other;        admin.createEPL(epl1);        EPStatement state = admin.createEPL(epl2);        state.addListener(new UpdateListener() {            @Override            public void update(EventBean[] newEvents, EventBean[] oldEvents) {                if (newEvents != null) {                    EventBean event = newEvents[0];                    System.out.println("Class:" + event.getUnderlying().getClass().getName() + ", id:" + event.get("id"));                }            }        });        StartEvent s = new StartEvent();        System.out.println("sendEvent: StartEvent");        runtime.sendEvent(s);        OtherEvent o = new OtherEvent();        o.setId(2);        System.out.println("sendEvent: OtherEvent");        runtime.sendEvent(o);        EndEvent e = new EndEvent();        System.out.println("sendEvent: EndEvent");        runtime.sendEvent(e);        OtherEvent o2 = new OtherEvent();        o2.setId(4);        System.out.println("sendEvent: OtherEvent");        runtime.sendEvent(o2);    }}class StartEvent{}class EndEvent{}class OtherEvent{    private int id;    public int getId()    {        return id;    }    public void setId(int id)    {        this.id = id;    }}

输出

sendEvent: StartEventsendEvent: OtherEventClass:com.ebc.NoOverLappingContext.OtherEvent, id:2sendEvent: EndEventsendEvent: OtherEvent

由此看出,在NoOverLapping这个Context下监控OtherEvent,必须是在StartEvent被触发才能监控到,所以在EndEvent发送后,再发送一个OtherEvent是不会触发Listener的。

 

转载于:https://www.cnblogs.com/yaoyuan2/p/10601598.html

你可能感兴趣的文章
Laravel 操作redis的各种数据类型
查看>>
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>