2016-10-17 5 views
0

먼저, 먼저 비동기 처리 도메인에 처음 들어 왔습니다. 현재 진행중인 프로젝트에서는 비동기 처리를 위해 프로젝트 원자로, 특히 Eventbus와 함께 스프링 부트를 사용합니다. eventbus의 사용 우리 시스템이보다 확장 성이 좋을 것 같아요.Reactor 응답 또는 오류를 돌려주는 Eventbus 예제

지금까지 EventBus 소비자는 뭔가를 반환하지 않는 일부 처리를 할 때 EventBus의 사용이 상당히 제한되었습니다. 다음과 같이 configiuration 예 프로세서는 다음과 같습니다

// 구성 파일

@SpringBootApplication 
public class Application implements CommandLineRunner { 

@Autowired 
private EventBus eventBus; 

@Autowired 
private BatchProcessor batchProcessor; 

@Override 
public void run(String... arg0) throws Exception { 
    eventBus.on("batchProcessor", batchProcessor); 

} 
} 

// 소비자 지금까지

@Service 
public class BatchProcesspr implements Consumer<Event<Request>> { 

@Override 
    public void accept(Event<Request> event) { 
     // processing goes here 
} 

,이 void 반환 타입을 갖는 동의 방법 좋았어요. 하지만 이제는 프로세서 메서드에서 응답을 반환하려는 시나리오가 있습니다. 또는 처리 중에 오류가 발생하여 적절한 예외를 throw해야하고 어느 경우 에나 응답/예외가 필요할 때 반환해야합니다. 기도.

반응기를 사용하여 수행 할 수 있습니까? 그렇다면 쉬운 예를 제공해주십시오. Promise에 대해 읽었지만 내 경우와 비슷한 예는 찾을 수 없습니다.

답변

0

sendAndReceive를 시도 했습니까? http://projectreactor.io/ext/docs/reference/#bus-request-reply

EventBus bus; 

bus.receive($("job.sink"), (Event<String> ev) -> { 
    return ev.getData().toUpperCase(); 
}); 

bus.sendAndReceive(
    "job.sink", 
    Event.wrap("Hello World!"), 
    s -> System.out.printf("Got %s on thread %s%n", s, Thread.currentThread()) 
); 

쉽게 서비스가 응답 할 때 통지 발신자 측에서 또 다른 소비자를 등록 할 수 있습니다.

+0

오류가 발생하면 어떻게해야합니까? 어떻게 처리할까요? –