2017-09-25 136 views
0

我想以同步的方式使用Vertx,为什么我试图得到垂直同步和函数使用像awaitEvent,awatResult。 我跟着这个link来做到这一点。vertx:错误通过使用awaitResult函数

这里是行我试图运行:

long tid = awaitEvent(h -> vertx.setTimer(1000, h)); 
System.out.println("Timer has now fired"); 

不过,我得到了folloing错误:

sept. 25, 2017 11:25:41 PM io.vertx.ext.web.impl.RoutingContextImplBase 
GRAVE: Unexpected exception in route 
java.lang.StackOverflowError 
    at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57) 
    at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57) 
    at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57) 
    at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57) 
    at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57) 
    at io.vertx.ext.web.impl.RoutingContextWrapper.request(RoutingContextWrapper.java:57) 

你知道我怎么能解决这个问题?

回答

1

这个简单的例子的工作原理:

import co.paralleluniverse.fibers.Suspendable; 
import io.vertx.core.Vertx; 
import io.vertx.ext.sync.Sync; 
import io.vertx.ext.sync.SyncVerticle; 

public class SyncExample extends SyncVerticle { 

    public static void main(String[] args) { 
     Vertx vertx = Vertx.vertx(); 

     vertx.deployVerticle(SyncExample.class.getName()); 
    } 

    @Suspendable 
    @Override 
    public void start() throws Exception { 
     System.out.println("Waiting for single event"); 
     long tid = Sync.awaitEvent(h -> vertx.setTimer(1000, h)); 
     System.out.println("Single event has fired with timerId=" + tid); 
    } 
} 

所得控制台输出是:

Waiting for single event 
Waiting for single event 
Single event has fired with timerId=0 

相关的依赖关系(表示为行家坐标)是:

<dependency> 
    <groupId>io.vertx</groupId> 
    <artifactId>vertx-sync</artifactId> 
    <version>3.4.1</version> 
</dependency> 
<dependency> 
    <groupId>co.paralleluniverse</groupId> 
    <artifactId>quasar-core</artifactId> 
    <version>0.7.9</version> 
</dependency> 

这个例子是相当独立,所以你应该能够'按原样'抓住它。如果这不适合你,那么也许你可以用更多的细节来更新你的问题,理想的情况是提供一个MCVE,但至少向我们展示了(a)定义你的verticle的代码(所有这些代码不仅仅是同步周围的几行呼叫)和(b)部署这个Verticle的代码。

+0

它适合我。但是,我试图在一条路线上做同样的事情,也许这是原因,但我仍然无法解决它! –

+0

你也许可以更新你的问题来向我们展示(a)定义你的verticle的代码(全部不仅仅是同步调用的几行)和(b)部署这个verticle的代码。 – glytching