单个异步调用的现有流程如下:对发送基于消息的调用的内部java服务进行调用。至此,该过程已完成。
已经实现了观察者模式,当响应(基于消息)返回到java服务时将被调用。
编辑后给出了更多细节:我已经使用CountDownLatch和Phaser进行了测试,以使这两个场景都能正常工作,其中我的主线程负责产生并行线程异步调用。并行线程完成,并且主线程等待接收到来自异步调用的响应的通知。如果响应表示成功,则继续执行下一个并行调用,依此类推。下面是一个运行良好的Phaser示例。问题是,我是在正确的道路上,还是有更容易/更好的东西?
main thread:
new Phaser(1);
for (iteration of number of request objects received){
create new thread, call serviceMethod.
phaser.arriveAndAwaitAdvance; //waits for arrival of registered party
if phaser.isTerminated
stop processing this request;
}
serviceMethod(){
phaser.register
perform call
}
onResponse(){
if SUCCESS
phaser.arriveAndDeregister(); //main thread should continue on to
next call
else
phaser.forceTermination
}
发布于 2018-10-12 06:19:22
尽管我对你的问题发表了评论,但我会给出一个答案,因为我相信我可以给你一个不同的答案,而不需要看到你的任何代码:
根据定义,异步调用是指调用者不会阻塞等待响应的调用。因此,如果您需要等待响应,则可以通过进行一系列同步调用来避免您所描述的问题。
同样,将您的问题中的一句话转述一下:“这个过程应该是我进行调用,但在触发下一个调用之前等待响应。”描述同步调用方案。从这个意义上说,我怀疑你从错误的方向来处理这个问题。
https://stackoverflow.com/questions/52769119
复制相似问题