2015-01-21 6 views
1

일부 데이터 스트림을 처리하기 위해 폭풍우를 사용하고 있습니다. 즉석에서 Esper bolt 문을 변경할 수 있습니까?

처음에 나는 내가 에스퍼 볼트에 사용되는 문장을 찾을 수 xml 파일을 읽습니다. 곧 내 토폴로지를 정의하고 클러스터에서 실행합니다. 이제 볼트에서 명령문을 변경하려면 xml을 수정하고 클러스터를 중지 한 다음 처음부터 다시 시작해야합니다.

내 XML을 검사 할 때 클러스터가 진행되는 동안 새로운 문으로 에스퍼 볼트를 업데이트 할 수 있습니다 정의 새로운 문을 발견 스레드를 보는 풍경 수 있습니까?

나는이 볼트 및 편집에 액세스 할 수있는 방법을 스레드에서
String statement = "select count(*) as userPerMinutes from event.win:time_batch(60 sec)"; 
    EsperBolt esperBolt = new EsperBolt.Builder() 
     .inputs().aliasComponent("user") 
     .withField("field1").ofType(String.class) 
     .withField("field2").ofType(Integer.class) 
     .withField("field3").ofType(Long.class) 
     .toEventType("event") 
     .outputs().onDefaultStream().emit("userPerMinutes") 
     .statements().add(statement) 
     .build(); 

/추가/그 문을 제거 다음과 같이

가 나는 에스퍼 볼트를 정의? 토폴로지를 통해? 그리고 어떻게?

답변

1

비슷한 시스템이 있습니다. storm + esper를 사용하여 분산 이벤트 프로세스 시스템을 실행합니다. Esper는 런타임에 epl을 제거하고 추가 할 수 있습니다. 내 시스템이하는 일은 볼트에서 새 스레드를 시작하여 수시로 데이터베이스에서 동기화하는 것입니다. 변경된 것을 업데이트하십시오 (제거한 후 추가하십시오).

희망이 도움이됩니다.


추가 코드가 유용 할 수

EPStatement statement = esperAdmin.getStatement(rule.getName()); 
if (statement != null) { 
    statement.destroy(); 
} 
+0

에스퍼 볼트의 문을 어떻게 업데이트 할 수 있습니까? externa 스레드에서 DB에서 새 볼트에 대한 설명을 얻으면 어떻게됩니까? 볼트를 청소하고 다시 조립합니까? 또는 무엇을? 위와 같은 코드가 – Pietro

+0

추가되었습니다. – DeepNightTwo

+0

완벽한! 그것은 작동합니다. 조언 감사합니다. – Pietro

1

나는 에스퍼을 잘 알고있어 추가하거나 즉시 문을 제거 어떤 문제를 볼 수 없습니다. 그리고 스톰이 당신을 그렇게하지 않을 것이라고 생각하지 않습니다.

+0

어떻게 수 있는가? 어떻게하면 볼트를 가져 와서 그 문장을 편집/추가/제거 할 수 있습니까? 마침내 그것의 정의처럼 그것을 구축() 했는가? – Pietro