Spec-Zone.ru › Vert.x 5

Начало работы с Vert.x

В этом руководстве вы узнаете, как начать работу с новым проектом Vert.x Web.

Перед началом вам потребуется:

  • JDK 11 или выше
  • Текстовый редактор или IDE
  • Maven 3 или выше
  • curl или HTTPie или браузер для выполнения HTTP-запросов

1Настройка

Чтобы создать новый проект, перейдите на start.vertx.io.

Выберите нужную версию Vert.x, выберите язык Java, Maven в качестве инструмента сборки и укажите идентификатор группы и артефакта. Затем добавьте зависимость Vert.x Web, набрав её в поле «Зависимости». Когда всё готово, нажмите кнопку Создать проект. Сохраните zip-архив на компьютере и распакуйте его в папку по вашему выбору.

Сгенерированный проект содержит:

  • Дескриптор сборки Maven pom.xml, настроенный для сборки и запуска вашего приложения
  • Пример Verticle и пример теста с использованием JUnit 5
  • Конфигурацию редактора для соблюдения стиля кода
  • Конфигурацию Git для игнорирования файлов

Если вы хотите попробовать прямо сейчас, вы можете скачать этот пример проекта, используя Maven или Gradle.

2Код

Откройте проект в выбранном вами редакторе и перейдите к src/main/java/com/example/starter/MainVerticle.java. Этот исходный файл содержит пример Verticle (единица развертывания Vert.x), который запускает HTTP-сервер. Вы измените его, чтобы приветствовать пользователей, выполняющих запросы к вашему серверу. Измените код следующим образом:

Java
Kotlin
package com.example.starter;
 
import io.vertx.core.Future;
import io.vertx.core.VerticleBase;
import io.vertx.core.MultiMap;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.Router;
 
public class MainVerticle extends VerticleBase {
 
  @Override
  public Future<?> start() {
    // Create a Router
    Router router = Router.router(vertx);
 
    // Mount the handler for all incoming requests at every path and HTTP method
    router.route().handler(context -> {
      // Get the address of the request
      String address = context.request().connection().remoteAddress().toString();
      // Get the query parameter "name"
      MultiMap queryParams = context.queryParams();
      String name = queryParams.contains("name") ? queryParams.get("name") : "unknown";
      // Write a json response
      context.json(
        new JsonObject()
          .put("name", name)
          .put("address", address)
          .put("message", "Hello " + name + " connected from " + address)
      );
    });
 
    // Create the HTTP server
    return vertx.createHttpServer()
      // Handle every request using the router
      .requestHandler(router)
      // Start listening
      .listen(8888)
      // Print the port on success
      .onSuccess(server -> {
        System.out.println("HTTP server started on port " + server.actualPort());
      })
      // Print the problem on failure
      .onFailure(throwable -> {
        throwable.printStackTrace();
      });
  }
}
class MainVerticle : VerticleBase() {
  override Future<*> start() {
    // Create a Router
    val router = Router.router(vertx)
 
    // Mount the handler for all incoming requests at every path and HTTP method
    router.route().handler { context ->
      // Get the address of the request
      val address = context.request().connection().remoteAddress().toString()
      // Get the query parameter "name"
      val queryParams = context.queryParams()
      val name = queryParams.get("name") ?: "unknown"
      // Write a json response
      context.json(
          json {
            obj(
              "name" to name,
              "address" to address,
              "message" to "Hello $name connected from $address"
            )
          }
      )
    }
 
    // Create the HTTP server
    return vertx.createHttpServer()
        // Handle every request using the router
        .requestHandler(router)
        // Start listening
        .listen(8888)
        // Print the port
        .onSuccess { server ->
          println("HTTP server started on port " + server.actualPort())
        }
  }
}

Этот код создаёт роутер Vert.x Web (объект, используемый для маршрутизации HTTP-запросов к определённым обработчикам запросов) и запускает HTTP-сервер на порту 8888. При каждом запросе он возвращает JSON-объект, содержащий адрес запроса, параметр запроса name и сообщение приветствия.

3Запуск

Для запуска кода откройте терминал и перейдите в папку проекта. Соберите приложение следующим образом:

$ mvn package

Затем запустите приложение:

$ mvn exec:java
HTTP server started on port 8888
apr 03, 2020 11:49:21 AM io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
INFO: Succeeded in deploying verticle

Теперь, когда сервер запущен, попробуйте отправить запрос:

HTTPie
curl
$ http http://localhost:8888
HTTP/1.1 200 OK
content-length: 115
content-type: application/json; charset=utf-8
 
{
    "address": "0:0:0:0:0:0:0:1:32806",
    "message": "Hello unknown connected from 0:0:0:0:0:0:0:1:32806",
    "name": "unknown"
}
 
$ http http://localhost:8888\?name\="Francesco"
HTTP/1.1 200 OK
content-length: 119
content-type: application/json; charset=utf-8
 
{
    "address": "0:0:0:0:0:0:0:1:32822",
    "message": "Hello Francesco connected from 0:0:0:0:0:0:0:1:32822",
    "name": "Francesco"
}
$ curl -v http://localhost:8888
*   Trying ::1:8888...
* Connected to localhost (::1) port 8888 (#0)
> GET / HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.69.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8
< content-length: 115
<
* Connection #0 to host localhost left intact
{"name":"unknown","address":"0:0:0:0:0:0:0:1:59610","message":"Hello unknown connected from 0:0:0:0:0:0:0:1:59610"}
 
$ curl -v http://localhost:8888\?name\="Francesco"
*   Trying ::1:8888...
* Connected to localhost (::1) port 8888 (#0)
> GET /?name=Francesco HTTP/1.1
> Host: localhost:8888
> User-Agent: curl/7.69.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< content-type: application/json; charset=utf-8
< content-length: 119
<
* Connection #0 to host localhost left intact
{"name":"Francesco","address":"0:0:0:0:0:0:0:1:59708","message":"Hello Francesco connected from 0:0:0:0:0:0:0:1:59708"}

4Дальнейшие шаги

Теперь, когда вы получили представление о том, насколько легко и приятно начать работу с Vert.x, вот несколько советов, которые помогут вам продвинуться в этом путешествии:

Введение

Прочитайте краткое введение в реактивное программирование с Eclipse Vert.x

Документация по ядру

Документация по ядру Vert.x научит вас написанию реактивных приложений

Как это сделать

Изучите практические руководства Vert.x, чтобы получить практическую помощь по конкретным темам

Руководства

Углубленно изучите Vert.x, используя наши руководства, посвященные сложным темам

© 2025 Eclipse Vert.x™Eclipse Vert.x™ is open source and dual-licensed under the Eclipse Public License 2.0 and the Apache License 2.0.Website design by Michel Krämer.
https://vertx.io/docs/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API