Vert.x - Как передать значение POST между вершинами?

Это класс, который запускает вершины:

      public class RequestResponseExample {
    public static void main(String[] args) throws InterruptedException {
        Logger LOG = LoggerFactory.getLogger(RequestResponseExample.class);

        final Vertx vertx = Vertx.vertx();
        final Handler<AsyncResult<String>> RequestHandler = dar-> vertx.deployVerticle(new ResponseVerticle());

        vertx.deployVerticle(new ResponseVerticle(), RequestHandler);
    }
}

Это класс вершины запроса:

      public class RequestVerticle extends AbstractVerticle{
    public static final Logger LOG = LoggerFactory.getLogger(RequestVerticle.class);
    static final String ADDRESS = "my.request.address";

    @Override
    public void start() throws Exception {
       
        Router router = Router.router(vertx);
        router.get("/Test").handler(rc -> rc.response().sendFile("index.html"));

        vertx.createHttpServer()
            .requestHandler(router)
            .listen(8080);
    }
}

Это класс ответа на ответ: здесь у меня возникли трудности с получением значения Inserted в файле HTML.

      public class ResponseVerticle extends AbstractVerticle{
    public static final Logger LOG = LoggerFactory.getLogger(RequestVerticle.class);
    @Override
    public void start() throws Exception {

    Router router = Router.router(vertx);

    // How to handle the POST value ?
    router.post("/Test/Result").handler(rc -> rc.end("The Post Value"));

    vertx.createHttpServer()
            .requestHandler(router)
            .listen(8080);
}

1 ответ

Когда пользователь вызывает POST /Test/Resultи отправляет некоторое значение POST, вы получаете его в своем классе вершин ответа (третий фрагмент). Если вы хотите поделиться этим методом с другими вершинами, вы должны сохранить его где-то внутри handlerчтобы другие вершины обращались к нему или немедленно пересылали его другим вершинам через шину событий.

Одним из возможных решений было бы создание третьей вершины (например, StorageVerticle), который имеет и методы. Туда, ResponseVerticleвызывает setметод для сохранения полученного значения, а RequestVerticleвызывает getметод для получения значения, отправленного пользователем при вызове метода POST.

Другое решение прямой связи между вершинами включает обмен сообщениями по шине событий — одна вершина публикует/отправляет сообщение, а все остальные вершины могут зарегистрироваться как потребители для получения этого сообщения. Подробнее об этом вы можете узнать здесь: https://vertx.io/docs/vertx-core/java/#_the_event_bus_api.

Трудно сказать, какой подход лучше, потому что это зависит от конкретного случая, и у меня есть ограниченная информация о масштабах проекта.

Другие вопросы по тегам