我正在测试一个场景,我想发送一个事件,并观察消费者何时完成处理以继续流程,即当我触发事件时,我需要阻止主线程直到结束对于消费者处理,使用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...");
}
}
答案 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"));
}