vertx:使用awaitResult函数的错误

时间:2017-09-25 21:32:14

标签: vert.x

我试图以同步的方式使用Vertx,这就是为什么我试图使用vert-sync和函数如awaitEvent,awatResult。 我按照link这样做了。

以下是我尝试运行的行:

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

然而,我得到了以下错误:

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 个答案:

答案 0 :(得分: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

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

<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的代码。