如何锁定线程直到Observable完成

时间:2017-05-18 13:27:51

标签: java multithreading rx-java observable spring-cloud-stream

我正在测试一个场景,我想发送一个事件,并观察消费者何时完成处理以继续流程,即当我触发事件时,我需要阻止主线程直到结束对于消费者处理,使用rxJava Observable,我没有成功锁定主线程以等待可观察的结果。

我的制片人

S

我的消费者

@Service
public class Producer {

    private MessageChannel output;

    @Autowired
    private Consumer consumer;

    @Autowired
    public Producer(Processor processor) {
        this.output = processor.output();
    }

    public void send(String event) {

        System.out.println("SENDING EVENT...");

        output.send(MessageBuilder.withPayload(event).build());

        //Observable<Boolean> obs = consumer.execute();
        //obs.subscribe();

        //Blocking process
        BlockingObservable.from(consumer.execute()).subscribe();

        //Continue to flow
        System.out.println("EVENT PROCESSED...");

    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用BlockingObservable.toFuture(consumer.execute()).get()来阻止该帖子,而不是BlockingObservable.from(consumer.execute()).subscribe()

答案 1 :(得分:1)

您需要使用运算符toBlockig(等待消费者使用)+ single来获取值。

   @Test
    public void observableEvolveAndReturnToStringValue() {
        assertTrue(Observable.just(10)
                             .map(String::valueOf)
                             .toBlocking()
                             .single()
                             .equals("10"));
    }

您可以在此处查看更多示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/utils/ObservableToBlocking.java