我想对具有值的事件进行排序; 所以我找到了 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/