Java 在Esper中启用具有外部计时的指标
我们正在使用Esper,在启用外部计时时,度量报告不起作用。当我禁用外部计时时,这些指标又开始工作了Java 在Esper中启用具有外部计时的指标,java,esper,Java,Esper,我们正在使用Esper,在启用外部计时时,度量报告不起作用。当我禁用外部计时时,这些指标又开始工作了 UpdateListener statsListener = this; esper.getEpAdministrator().createEPL("select * from com.espertech.esper.client.metric.EngineMetric", QQQ_ENGINE_METRIC).addListener(statsListener); esper.getEpAd
UpdateListener statsListener = this;
esper.getEpAdministrator().createEPL("select * from
com.espertech.esper.client.metric.EngineMetric",
QQQ_ENGINE_METRIC).addListener(statsListener);
esper.getEpAdministrator().createEPL("select * from
com.espertech.esper.client.metric.StatementMetric",
QQQ_STATEMENT_METRIC).addListener(statsListener);
//...
@Override
public void update(EventBean[] arg0, EventBean[] arg1) {
log.info("arg0 " + arg0 + ((arg0 != null) ? arg0.length : 0));
}
我没有得到更新方法的日志输出
My esper.xml设置:
<engine-settings>
<defaults>
<metrics-reporting enabled="true" jmx-engine-metrics="true"
engine-interval="1000" statement-interval="1000" threading="true"/>
</defaults>
</engine-settings>
我们需要外部计时,因为我们正在使用旧数据和事件对新的EPL指令运行一些自动化测试,并且测试的数据速率与实时数据的数据速率不同
我还尝试将CurrentTimeSpanEvent更改为一系列CurrentTimeEvents:
if (originalEsperTime < lastEsperTime) {
long tmptt = originalEsperTime;
while (tmptt < lastEsperTime) {
esper.sendEvent(new CurrentTimeEvent(tmptt));
tmptt += 250;
}
esper.sendEvent(new CurrentTimeEvent(tmptt));
}
if(originalEsperTime
也许您忘记配置或设置外部计时器了?或者在创建语句之前忘记设置时间?如果您可以提供一个完整的测试类,而不仅仅是代码片段,那么这个问题可能可以通过查看代码来解决。Esper外部计时应该从当前系统时间开始初始化,即system.currentTimeMillis()
。这是度量失败的基本用例:
public class Main implements UpdateListener {
public static class TestEvent {
public TestEvent(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
private EPServiceProvider esper;
private EPAdministrator epAdministrator;
private EPRuntime epRuntime;
private boolean externalTiming = true;
private long currentTimeExternal;
public void update(EventBean[] arg0, EventBean[] arg1) {
if (arg0 != null && arg0.length > 0)
System.out.println(new Date().toString() + " arg0: " + arg0[0]);
}
public void run() {
Configuration esperConfig = new Configuration();
esperConfig.configure(new java.io.File("esper.xml"));
esper = EPServiceProviderManager.getProvider("AsantosEsperTest",
esperConfig);
epAdministrator = esper.getEPAdministrator();
epRuntime = esper.getEPRuntime();
// This breaks metrics. For the metrics to work, the initial timing
// event on external timing should be system time at engine
// initialization.
currentTimeExternal = 0;
initializeExternalTiming();
initializeMetrics();
initializeEventType();
initializeStatements();
while (true) {
epRuntime.sendEvent(new TestEvent("QQQ"));
if (externalTiming) {
epRuntime.sendEvent(new CurrentTimeSpanEvent(
currentTimeExternal));
currentTimeExternal += 150 * 2;
}
try {
Thread.sleep(150);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void initializeStatements() {
epAdministrator.createEPL("select * from TestEvent").addListener(this);
}
private void initializeMetrics() {
epAdministrator.createEPL(
"select * from com.espertech.esper.client.metric.EngineMetric")
.addListener(this);
epAdministrator
.createEPL(
"select * from com.espertech.esper.client.metric.StatementMetric")
.addListener(this);
}
private void initializeExternalTiming() {
if (externalTiming) {
epRuntime.sendEvent(new TimerControlEvent(
TimerControlEvent.ClockType.CLOCK_EXTERNAL));
epRuntime.sendEvent(new CurrentTimeEvent(currentTimeExternal));
}
}
private void initializeEventType() {
epAdministrator.getConfiguration().addEventType(TestEvent.class);
}
public static void main(String[] args) {
Main m = new Main();
m.run();
}
}
esper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<esper-configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.espertech.com/schema/esper"
xsi:schemaLocation=
"http://www.espertech.com/schema/esper/esper-configuration-2.0.xsd">
<engine-settings>
<defaults>
<metrics-reporting enabled="true" jmx-engine-metrics="true" engine-interval="1000" statement-interval="1000" threading="false"/>
</defaults>
</engine-settings>
</esper-configuration>
我按照您的要求创建了一个示例程序,并且这些指标始终有效:(我不知道我做错了什么。。。
<?xml version="1.0" encoding="UTF-8"?>
<esper-configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.espertech.com/schema/esper"
xsi:schemaLocation=
"http://www.espertech.com/schema/esper/esper-configuration-2.0.xsd">
<engine-settings>
<defaults>
<metrics-reporting enabled="true" jmx-engine-metrics="true" engine-interval="1000" statement-interval="1000" threading="false"/>
</defaults>
</engine-settings>
</esper-configuration>