2017-09-25 1 views
0

J'essaie d'utiliser Vertx de manière synchrone, c'est pourquoi j'essaie de m'y habituer avec la fonction vert-sync et de fonctionner comme awaitEvent, awatResult. J'ai suivi ce link pour ce faire.vertx: erreur en utilisant la fonction awaitResult

Voici les lignes que je suis en train de courir:

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

Cependant, je reçois l'erreur de 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) 

Savez-vous comment pourrais-je résoudre ce problème?

Répondre

1

Cet exemple simple fonctionne:

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); 
    } 
} 

La sortie de la console résultante est:

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

Les dépendances pertinentes (exprimées en coordonnées Maven) sont:

<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> 

Cet exemple est tout à fait autonome donc vous devriez être capable de l'attraper 'tel quel'. Si cela ne fonctionne pas pour vous, vous pouvez peut-être mettre à jour votre question avec des détails supplémentaires, idéalement en fournissant un MCVE mais en nous montrant au moins (a) le code qui définit votre verticule (tout cela pas seulement les quelques lignes autour de la synchronisation appel) et (b) le code qui déploie cette verticle.

+0

ça marche pour moi. Cependant, j'essaie de faire la même chose dans un itinéraire peut-être c'est la raison mais je ne pouvais toujours pas être capable de le résoudre! –

+0

Vous pourriez peut-être mettre à jour votre question pour nous montrer (a) le code qui définit votre verticule (tout cela pas seulement les quelques lignes autour de l'appel de synchronisation) et (b) le code qui déploie cette verticle. – glytching