2017-06-30 1 views
2

私はこの基本的なPOCコードを持っています。私はイベントが公開されているのを見ることができますが、リスナーには何の警告も出ません。 以下のコードでは、pattern1またはpattern2のいずれのステートメントにも警告がありません。 設定のsetInternalTimerEnabledはデフォルトではTrueですが、コードでTrueを設定しようとしましたが、同じ問題です。 何か不足していますか? 何か手がかりが本当に役に立ちます。エスパパターンタイマー:interval()が動作しません

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

作品罰金。これを実行するには、投稿したコードが不完全なので、私は空のTradeEventを定義しました。 – user3613754

+0

@ user3613754もう一度やり直しましたが、文のコールバックにヒットしたことはありません。残りのコードを追加して短縮しました。どんな助け? – impossible

+0

普通のJavaアプリケーションでは実行していない可能性があります。したがって、コンソール出力が表示されません。 – user650839

答えて

1

私は余分な現在の時間イベントを追加することによってそれを稼働させました。

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

Esperの内部タイマーが動作しない理由はまだ分かりません。私が手動で有効にしても。

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

このコードを実行してみてください。

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); 
    } 
} 

基本的に、Esperの内部タイマーに関する報告された問題があります。私にとって Another similar issue.

More on config settings.

+0

ありがとう、私はすでに同じソリューションを使用しました。 – impossible

関連する問題