Vertx не является обязательным Маршрутизаторы - PullRequest
0 голосов
/ 12 июня 2018

Ну, я чувствовал себя действительно потерянным из-за структуры Vertx, потому что все является лямбда-выражением.я следовал этому учебнику именно для того, чтобы хорошо структурировать свое приложение, к сожалению, оно не регистрирует ни один маршрутизатор, я понятия не имею, почему.пожалуйста, укажите ниже, что я сделал

serviceEndPoint, то же самое с вышеупомянутым учебником

import io.vertx.core.Vertx;
import io.vertx.ext.web.Router;

public interface ServiceEndPoint {
    String mountPoint();

    Router router(Vertx vertx);
}

и вот служба подписки

import com.poc.poc.repositories.SubscriptionRepository;
import com.poc.poc.services.ServiceEndPoint;
import io.vertx.core.Vertx;
import io.vertx.ext.web.Router;

public class SubscriptionService implements ServiceEndPoint {
    private SubscriptionRepository subscriptionRepository;

    public SubscriptionService() {
        subscriptionRepository = new SubscriptionRepository();

    }

    @Override
    public String mountPoint() {
        return "/test";
    }

    @Override
    public Router router(Vertx vertx) {
        Router router = Router.router(vertx);
        router.get("/test").handler(rc -> rc.response().end(subscriptionRepository.getSubscriptionInfo(rc, vertx).toString()));
        return router;
    }
}

И, наконец, вот сервер вертикальный

import com.poc.poc.services.ServiceEndPoint;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Future;

import java.util.ServiceLoader;
import java.util.stream.StreamSupport;

import io.vertx.ext.web.Router;

public class ServerVertical extends AbstractVerticle {

    @Override
    public void start(final Future<Void> startFuture) throws Exception {

        ServiceLoader<ServiceEndPoint> loader = ServiceLoader.load(ServiceEndPoint.class);

        Router main = StreamSupport.stream(loader.spliterator(), false)
            .collect(() -> Router.router(vertx), //the main router
                (r, s) -> r.mountSubRouter(s.mountPoint(), s.router(vertx)),
                (r1, r2) -> {
                });

        vertx.createHttpServer().requestHandler(main::accept).listen(8080, res -> {
            if (res.succeeded()) {
                startFuture.complete();
            } else {
                startFuture.fail(res.cause());
            }
        });
    }
}

Обратите внимание, как только я запустил приложение, я получаю эти предупреждения

Jun 12, 2018 6:16:45 PM io.vertx.core.impl.BlockedThreadChecker
WARNING: Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 2486 ms, time limit is 2000
Jun 12, 2018 6:16:46 PM io.vertx.core.impl.BlockedThreadChecker
WARNING: Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 3485 ms, time limit is 2000

, кстати Router main = StreamSupport.stream(loader.spliterator(), false) размер равен 0.

любая помощь?

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

После того как вы создали декларацию интерфейса службы (com.poc.poc.services.ServiceEndPoint) и конкретную реализацию (SubscriptionService), вы должны добавить привязку поставщика услуг .

Согласно документации ServiceLocator, привязка должна быть вставлена ​​в файл, названный в честь FQN интерфейса, т. Е. В META-INF / services / com.poc.poc.services.ServiceEndPoint (вся структура каталогов находится в каталоге project / module resources ).

Файл будет содержать фактическую реализацию интерфейса:

com.poc.poc.services.SubscriptionService
0 голосов
/ 13 июня 2018

Во-первых, не все в Vert.x является лямбда-выражением.Это просто странный урок, который вы нашли.Как видите, он использует java.util.ServiceLoader, который не является классом Vert.x.Также я не знаком ни с кем, кто рекомендует использовать этот класс с приложениями Vert.x.
Он пытается динамически загружать ваши классы.Что вы, вероятно, упускаете, так это помещаете правильный файл в каталог META-INF, как описано здесь: https://docs.oracle.com/javase/tutorial/ext/basics/spi.html#register-service-providers

В любом случае, я бы не рекомендовал использовать VertX.Вместо этого, перейдите к обычному учебнику VertX, который отлично: https://vertx.io/docs/vertx-web/java/#_handling_requests_and_calling_the_next_handler

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...