2017-06-30 4 views
2

Ich habe diesen grundlegenden POC-Code. Ich kann die Ereignisse sehen, die veröffentlicht werden aber keine Warnung in Zuhörern erhalten. Im folgenden Code wird keine der Anweisungen pattern1 oder pattern2 alarmiert. Configs setInternalTimerEnabled ist standardmäßig True, aber ich habe versucht, es im Code True, aber immer noch das gleiche Problem. Fehle ich etwas? Jeder Hinweis wäre wirklich hilfreich.Esper-Muster-Timer: Intervall() funktioniert nicht

public class PatternSimpleQue { 

    public static void main(String args[]) throws InterruptedException { 
     Configuration configuration = new Configuration(); 
     configuration.addEventType("TestEvent", TestEvent.class); 
     configuration.getEngineDefaults().getThreading().setInternalTimerEnabled(true); 
     configuration.getEngineDefaults().getLogging().setEnableTimerDebug(true); 

     EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(configuration); 
     EPRuntime runtime = engine.getEPRuntime(); 
     EPAdministrator admin = engine.getEPAdministrator(); 
     engine.initialize(); 

     String pattern1 = "select * from pattern [every timer:interval(1 sec) -> every TestEvent]"; 
     String pattern2 = "select (select qty from TestEvent.std:lastevent()) as qty from pattern [every timer:interval(1 sec)]"; 

     admin.createEPL(pattern1).addListener((eventBeans, eventBeen1) -> { 
      System.out.println("In event S3"); 
      try { 
       for (EventBean anEventBean : eventBeans) { 
        System.out.println("****S3**** Pattern bean -> " + anEventBean.toString()); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }); 
     admin.createEPL(pattern2).addListener((eventBeans, eventBeen1) -> { 
      System.out.println("In event S4"); 
      try { 
       for (EventBean anEventBean : eventBeans) { 
        System.out.println("--S4--Pattern bean -> " + " :: " + anEventBean.toString()); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }); 

     while (true) { 
      sendEvent(runtime, new TestEvent(String.valueOf(new Random().nextInt(100)), 10, 1)); 
      sendEvent(runtime, new TestEvent(String.valueOf(new Random().nextInt(100)), 20, -1)); 
      Thread.sleep(5000); 
     } 
    } 

    private static void sendEvent(EPRuntime runtime, TestEvent testEvent) { 
     System.out.println("\n-- New event: " + testEvent); 
     runtime.sendEvent(testEvent); 
    } 
} 


public class TestEvent { 

    private String instanceId; 
    private int qty; 
    private int side; 

    public String getInstanceId() { 
     return instanceId; 
    } 

    public int getQty() { 
     return qty; 
    } 

    public int getSide() { 
     return side; 
    } 


    public TestEvent(String instanceId, int qty, int side) { 
     this.instanceId = instanceId; 
     this.qty = qty; 
     this.side = side; 
    } 

    @Override 
    public String toString() { 
     return "TestEvent{" + 
       "instanceId='" + instanceId + '\'' + 
       ", qty=" + qty + 
       ", side=" + side + 
       '}'; 
    } 
} 
+0

funktioniert gut für mich. Um dies zu erreichen, habe ich ein leeres TradeEvent definiert, da der von Ihnen gepostete Code unvollständig ist. – user3613754

+0

@ user3613754 Ich habe es erneut versucht, aber ich sehe keinen Callback der Anweisung, der getroffen wird. Ich habe den restlichen Code hinzugefügt und gekürzt. Irgendeine Hilfe? – impossible

+0

Vielleicht führen Sie es nicht in einer einfachen Java-Anwendung und sehen daher keine Konsolenausgabe? – user650839

Antwort

1

Ich habe es funktioniert durch Hinzufügen von zusätzlichen aktuellen Zeit Ereignis.

runtime.sendEvent(new CurrentTimeEvent(currentTimeMillis())); 

Ich weiß immer noch nicht, warum Esper interne Timer nicht funktioniert. Auch wenn ich es manuell aktiviert habe.

configuration.getEngineDefaults().getThreading().setInternalTimerEnabled(true); 
0

Versuchen Sie, diesen Code auszuführen, dies sollte funktionieren.

public class PatternSimpleQue { 

    public static void main(String args[]) throws InterruptedException { 
     Configuration configuration = new Configuration(); 
     configuration.addEventType("TestEvent", TestEvent.class); 
     configuration.getEngineDefaults().getThreading().setInternalTimerEnabled(true); 
     configuration.getEngineDefaults().getLogging().setEnableTimerDebug(true); 

     EPServiceProvider engine = EPServiceProviderManager.getDefaultProvider(configuration); 
     EPRuntime runtime = engine.getEPRuntime(); 
     EPAdministrator admin = engine.getEPAdministrator(); 
     engine.initialize(); 

     String pattern1 = "select * from pattern [every timer:interval(1 sec) -> every TestEvent]"; 
     String pattern2 = "select (select qty from TestEvent.std:lastevent()) as qty from pattern [every timer:interval(1 sec)]"; 

     admin.createEPL(pattern1).addListener((eventBeans, eventBeen1) -> { 
      System.out.println("In event S3"); 
      try { 
       for (EventBean anEventBean : eventBeans) { 
        System.out.println("****S3**** Pattern bean -> " + anEventBean.toString()); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }); 
     admin.createEPL(pattern2).addListener((eventBeans, eventBeen1) -> { 
      System.out.println("In event S4"); 
      try { 
       for (EventBean anEventBean : eventBeans) { 
        System.out.println("--S4--Pattern bean -> " + " :: " + anEventBean.toString()); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     }); 

     while (true) { 
      sendEvent(runtime, new TestEvent(String.valueOf(new Random().nextInt(100)), 10, 1)); 
      sendEvent(runtime, new TestEvent(String.valueOf(new Random().nextInt(100)), 20, -1)); 
      Thread.sleep(5000); 
     } 
    } 

    private static void sendEvent(EPRuntime runtime, TestEvent testEvent) { 
     System.out.println("\n-- New event: " + testEvent); 
     runtime.sendEvent(new CurrentTimeEvent(currentTimeMillis())); 
     runtime.sendEvent(testEvent); 
    } 
} 

Im Grunde gibt es ein gemeldetes Problem auf Esper internen Timer. Another similar issue.

More on config settings.

+0

Danke, ich habe die selbe Lösung schon benutzt. – impossible

Verwandte Themen