Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Esper中启用具有外部计时的指标_Java_Esper - Fatal编程技术网

Java 在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

我们正在使用Esper,在启用外部计时时,度量报告不起作用。当我禁用外部计时时,这些指标又开始工作了

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>