我想做連鎖的異步呼叫,完成后得到一個單一的回呼回應。
例如,像這樣:
public invokeAsyncAPI1 () {
AsyncRabbitTemplate.RabbitConverterFuture<Response1> futureResponse1 = asyncAPI1();
futureResponse1.addCallback {
successCallBack (Response1 result1) {
if(result != OK) {
return立即回傳false。
} else {
invokeAsyncAPI2(result1)。
}
}
failureCallBack () {
return立即以false回傳。
}
}
}
public invokeAsyncAPI2 ( result1) {
AsyncRabbitTemplate.RabbitConverterFuture<Response2> futureResponse2 = asyncAPI2()。
futureResponse2.addCallback {
successCallBack (Response2 result2) {
if(result != OK) {
return立即回傳false。
} else {
return true回應
}
}
failureCallBack () {
回傳 false 立即回傳。
}
}
}
最后得到result2.get(),如果有效則重新運行ok回應。
uj5u.com熱心網友回復:
是的;這是有可能的--這里有一個例子:
@SpringBootApplication
public class So69213655Application {
public static void main(String[] args){
SpringApplication.run(So69213655Application.class, args)。
}
@RabbitListener(queues = "service1")
@SendTo
public String service1(String in) {
System.out.println("service1: "/span> in)。
return in.toUpperCase()。
}
@RabbitListener(queues = "service2")/span>
@SendTo
public String service2(String in) {
System.out.println("service2: "/span> in)。
return in.toLowerCase()。
}
@Bean
AsyncRabbitTemplate template(RabbitTemplate模板) {
AsyncRabbitTemplate async = new AsyncRabbitTemplate(模板)。
return async。
}
@Bean[/span
ApplicationRunner runner(ChainedSender sender) {
return args -> {
System.out.println("And the answer is: " sender.send("TesT").get(10, TimeUnit.SECONDS) )。
};
}
}
@Component.
class ChainedSender {
private final AsyncRabbitTemplate模板。
ChainedSender(AsyncRabbitTemplate template) {
this.template = template;
}
Future<String> send(String out) {
SettableListenableFuture<String> future = new SettableListenableFuture<> ()。
RabbitConverterFuture<Object> future1 = this.template.convertSendAndReceive("service1"/span>, out)。
future1.addCallback(result1 -> {
RabbitConverterFuture<Object> future2 = this.template.convertSendAndReceive("service2", result1) 。
future2.addCallback(result2 -> {
future.set((String) result2)。
}, ex -> {
future.setException(ex);
});
}, (ex) -> {
future.setException(ex);
});
return future。
}
}
service1: TesT
service2: TEST
而答案是:TEST
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329894.html
標籤:
上一篇:只讀訪問私人GitHub存盤庫
