2016-09-13 3 views
1

내가 토폴로지를 가지고 : Bolt1이 튜플을받는 곳 르네가 Bolt2 및 기타 스트림에 의해 가입 된 스트림 "mystream"을 가지고BaseRichSpout - Apache Storm의 fail() 메소드에서 실패의 근원을 찾는 방법? 다음과 같이

Spout --> Bolt 1 --> Bolt2 --> Bolt3 

"bolt1stream"입니다.

(내 경우에는 Bolt2) 튜플의 실패의 경우

, 나는이 들어

Bolt1에서 다시는 Bolt2에서 재생을하고 싶습니다, 나는 Bolt2에서 튜플을 실패 할 수 있습니다. 이 실패 메시지가 spout에 도달하면 실패한 지점을 기준으로 mystream/bolt1stream으로 내 보냅니다. 따라서 오류 지점에서 처리가 시작됩니다.

그러나 BaseRichSpout의 fail()에는 Tuple 대신 Object 매개 변수가 있습니다. 튜플과 마찬가지로 sourceComponent을 어떻게 알 수 있습니까? 또는 실패한 곳에서 튜플을 재생하는 가장 좋은 방법은 무엇입니까? 각 스트림에 대한 사전

답변

0

에서

덕분에, 나는 스트림을 식별하기 위해 별도의 클래스를 사용합니다. 다른 방법은 동일한 클래스를 사용하고 스트림을 식별하는 클래스 내부에 정수 또는 열거 형을 사용하는 것입니다.

@Override 
public void fail(Object msgId) { 
    if (msgId instanceof MyTupleClass) { 
    // Default stream 
    MyTupleClass oneTuple = (MyTupleClass) msgId; 
    //---tuple replay logic. Re-emitting the failed tuples  
    ReEmitTheDefaultStreamTuple(oneTuple); 
} 
else { 
    //it's the other stream 
    //For this stream you could perhaps use MySecondTupleClass 
} 
+0

MyTupleClass는 볼트에 보내려는 데이터를 저장하기 위해 만드는 클래스입니다. 그러나 그것을 구현하십시오 : class MyTupleClass {public String someInfo;}. 또한 문제에 대한 토론을 확대하고 싶다면 storm 메일 링리스트 http://mail-archives.apache.org/mod_mbox/storm-user/가 있습니다. 이 대답이 도움이된다면, 그것을 상향 조정하여 그것을 수용 가능한 대답으로 표시 할 수 있습니다. – Nav

+0

나는 (MyTupleClass)도 확인 할 수 있습니까? org.quadrisk.utils.EventTuple을 backtype.storm.tuple.Tuple로 변환 할 수 없다는 오류가 발생합니다. –