java - 我如何通过 esper 订购 Activity ?

标签 java complex-event-processing esper

我想对具有值的事件进行排序; 所以我找到了 eseper 但我找不到解决方案。

我从网上找到了一个示例,并尝试对其进行自定义,但失败了。

这是我尝试过的代码。

SampleEvent.java

public class SampleEvent {
    private String item = null;
    private int times = 0;

    public SampleEvent(String item, int times) {
            super();
            this.item = item; 
            this.times = times;
    } 

public String getItem() {
            return item;
    } 

public void setItem(String item) {
            this.item = item;
    } 


public int getTimes() {
            return times;
}

public void setTimes(int times) {
            this.times = times;
}

} 

示例监听器.java

import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.UpdateListener; 

public class SampleListener implements UpdateListener {
        public void update(EventBean[] newEvents, EventBean[] oldEvents) {
                EventBean event = null;

                event = newEvents[0];
                System.out.println(event.get("item") + ", time = " + event.get("times"));
        }
} 

SampleEngine.java

package example.esper;

import com.espertech.esper.client.Configuration;
import com.espertech.esper.client.EPAdministrator;
import com.espertech.esper.client.EPRuntime;
import com.espertech.esper.client.EPServiceProvider;
import com.espertech.esper.client.EPServiceProviderManager;
import com.espertech.esper.client.EPStatement;

public class SampleEngine {
        public static void main(String[] args) {
                Configuration config = null;
                EPServiceProvider service = null;
                EPStatement stat = null;
                String epl = null;
                SampleListener listener = null;
                EPRuntime runtime = null;

                config = new Configuration();
                config.addEventType("SampleEvent", SampleEvent.class.getName());
                service = EPServiceProviderManager.getDefaultProvider(config);

                EPAdministrator admin = service.getEPAdministrator();

                EPStatement namedWindowStmt = admin.createEPL("create window orderdEvt.std:unique(item) (item String, times int)");
                epl = "insert into orderdEvt select item, times from SampleEvent GROUP BY times ORDER BY times";
                namedWindowStmt=admin.createEPL(epl);

                listener = new SampleListener();
                namedWindowStmt.addListener(listener);


                runtime = service.getEPRuntime();
                for (int i = 0;i < 20; i++) {
                        try {
                            int j = (int)(Math.random()*100)+1;
                             runtime.sendEvent(new SampleEvent("aaa_" + i, j));

                        } catch (Exception ex) {
                                ex.printStackTrace();
                        }
                }
        }
} 

这些代码不起作用。 它应该按时间对事件进行排序。

有谁知道如何解决这个问题或者有例子吗?

谢谢。

最佳答案

Esper 是一个流处理器。在对事件进行排序时,您需要确定正在比较哪些事件(即数据窗口是什么,如果有的话)以及在什么条件下输出它们(每 5 秒一次,当 X 发生时,导致输出的条件)。 当前版本是 8.2,API 已更改,因此请使用更新的示例。可以在 esper home page 找到它们。 .

一个例子是

select * from Event#time(10 seconds) output snapshot every 2 seconds order by value

关于java - 我如何通过 esper 订购 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212489/

相关文章:

sql-server-2008-r2 - OSIsoft的 'PI System'中的PI代表什么?

java - 使用 Esper,如何对事件进行动态过滤?

architecture - 处理复杂事件

apache-flink - 我应该选择哪种开源CEP来进行分布式和流水线处理;悉地、弗林克、埃斯珀?

java - final 变量都被匿名类捕获了吗?

java - JPA - 实体对象持续存在到底意味着什么?坚持的定义是什么?

java - 如何更改 JTextArea 的默认光标位置?

java - 使用另一个类中的 JFrame

事件过滤和触发算法

c++ - 处理大量规则(条件和约束)CEP 系统