2014-11-05 2 views
1

난 폭풍 다음 토폴로지를 구현하려는 : B2 등 A1, B1 및 A2는 동일한 것을이 스톰 토폴로지를 구현하려면 어떤 방법을 사용해야합니까?

볼트가
a1->a2->a3->a4 
    |  | 
    -<----<-- 


b1->b2->b3->b4 
    |  | 
    -<----<-- 

참고. 두 개의 동일한 스트림이 있지만 볼트 사이에 전달 된 튜플은 스트림 내에 남아 있어야합니다. 또한 a4-> a2, b4-> b2로 이어지는 루프가 있습니다.

개별 스트림을 구현하려면 streamID 필드에서 fieldsGrouping을 사용하거나 각 스트림에 별도의 streamID를 만드는 방법 중 하나를 생각했습니다. 후자의 옵션은 좋지만 내 구현은 우아하지 않은 것 같습니다.

builder.setBolt("a2", new A2(), 1).shuffleGrouping("a1", "streamA"); 
builder.setBolt("b2", new B2(), 1).shuffleGrouping("b1", "streamB"); 

그리고

다음 두 번째 요구 사항을 구현하기 위해 같은 맥락에서 계속 : 더 나은 방법이

builder.setBolt("a2", new A2(), 1).shuffleGrouping("a4", "stream1"); 

거기를?

+0

A2의 루프 대신 A1에서 스파우트 튜플로 검사 할 요소를 A4에서 생성 할 수 있습니까? 또는 A4에서 A2 (A1에서 A2로 동일하지 않음)에서 수행되는 완전히 다른 작업입니까? – zenbeni

+0

죄송합니다. 질문을 이해할 수 없습니다. 스트림에서 일어나는 일은 a1, a2, a3 및 a4가 순차적으로 메시지를 처리하고 있다는 것입니다. a4는 a2로 전달해야하는 다운 스트림 (내 다이어그램에 표시되지 않음)에서 주기적으로 메시지를 수신 할 수 있습니다. – Johnny

+0

당신은이 사건을 문서화해야하며, 할 일이 더 있어야한다고 생각합니다. IMHO 당신은 한 볼트에서 우려를 "팬케이크"해서는 안됩니다. 가능한 경우 다른 볼트/스트림에서이 케이스를 분리하는 것이 가장 좋습니다. – zenbeni

답변

0

나는 이것을 directGrouping과 다른 스트림으로 끝내게되었습니다. 따라서 a1-> a2-> a3> a4와 a4> a2로가는 스트림이 있습니다. 이 방법을 통해 A와 B 그룹간에 튜플이 전달되지 않도록 할 수 있습니다.

0

귀하의 구현에서 볼 수있는 유일한 문제는 불필요한 A2 인스턴스가 2 개 있다는 것입니다. 당신은 할 수 있습니다

builder.setBolt("a2", new A2(), 1) 
     .shuffleGrouping("a1", new Fields("streamA")) 
     .shuffleGrouping("a4", new Fields("stream1"));