Vert.x

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Vert.x
Тип фреймворк
Автор Tim Fox
Разработчики Tim Fox, VMWare, Red Hat, Eclipse Foundation
Написана на Java, JavaScript, Apache Groovy, Ruby, Scala, Kotlin
Операционная система Cross-platform
Аппаратная платформа Java Virtual Machine
Последняя версия 4.3.1 (25 мая 2022; 2 года назад (2022-05-25)[1])
Тестовая версия 4.0.0.Beta1 (28 июля 2020; 4 года назад (2020-07-28)[2])
Репозиторий github.com/eclipse/vert.x
Лицензия Apache License ver. 2.0, Eclipse Public License ver. 2.0
Сайт vertx.io

Eclipse Vert.x — многоязыковой (Java, Kotlin, JavaScript, Groovy) асинхронный веб-фреймворк работающий на событийно-ориентированной архитектуре и запускается поверх JVM.

Vert.x начал разрабатывать Tim Fox в 2011 пока он работал в VMware.

С версии 2.1.4, Vert.x предоставляет свой API на Java, JavaScript, Groovy, Ruby, Python, Scala, Clojure и Ceylon.

С версии 3.7.0, Vert.x предоставляет свой API на Java, JavaScript, Groovy, Ruby, Scala, Kotlin and Ceylon.

С версии 3.9.1, Vert.x предоставляет свой API на Java, JavaScript, Groovy, Ruby, Scala and Kotlin.

12 января 2016 Tim Fox ушел с поста руководителя проекта Vert.x и на его место встал Julien Viet.

Архитектура

[править | править код]

Vert.x использует в своей работе неблокирующий клиенто-серверный фреймворк Netty.

Verticle — это аналог сервлета(или «актора») и является атомарной единицей развёртывания в приложении. Есть 2 типа: Стандартный и Рабочий.

public class MyVerticle extends AbstractVerticle {
 // Called when verticle is deployed
 public void start() {
 }
 // Optional - called when verticle is undeployed
 public void stop() {
 }
}

Handler — обработчик событий внутри Verticle.

HttpServer server = vertx.createHttpServer();
// Router
Router router = Router.router(vertx);
// set Handler for every request
router.route().handler(ctx -> {
  // This handler will be called for every request
  HttpServerResponse response = ctx.response();
  response.putHeader("content-type", "text/plain");
  // Write to the response and end it
  response.end("Hello World from Vert.x-Web!");
});
server.requestHandler(router).listen(8080);

Router — главный компонент по поиску совпадений для пришедшего запроса.

Route route = router.route("/some/path/");
Route route = router.route().path("/some/path/");
route.handler(ctx -> {
  // This handler will be called for the following request paths:

  // `/some/path/`
  // `/some/path//`
  //
  // but not:
  // `/some/path` the end slash in the path makes it strict
  // `/some/path/subdir`
});
//router for POST request
router.post("/some/endpoint").handler(ctx -> {
  ctx.request().setExpectMultipart(true);
  ctx.next();
});
//router for GET request
router
  .get("/some/path")
  .respond(
    ctx -> ctx
      .response()
        .putHeader("Content-Type", "text/plain")
        .end("hello world!"));

Возможности

[править | править код]
  • Компоненты могут быть написаны на таких языках как: Java, JavaScript, Groovy, Ruby, Scala, Kotlin и Ceylon.
  • Простая асинхронная модель позволяющая писать масштабируемые и неблокирующие приложения.
  • Шина событий позволяющая передавать сообщения как внутри приложения, так и между его узлами (нодами).
  • Модель «акторов» позволяющая запускать «тяжелые» процессы в для обработки данных или их получении.
  • Интеграция с шаблонным движками (MVEL, Jade, Handlebars, Thymeleaf, Apache FreeMarker, Pebble, Rocker, HTTL, Rythm)
  • Vert.x 3 требует версии Java не ниже 8

Реализация следующих свойств:

  1. Кластеризация через Hazelcast, Infinispan и так далее.
  2. Тестирование через JUnit 5
  3. Подключение к разным Базам Данных(JDBC, MySQL, PostgreSQL, DB2, MSSQL, MongoDB, Redis, Cassandra)
  4. Очереди сообщений (Kafka, RabbitMQ, AMQP, MQTT)
  5. Авторизация через сторонние службы (JWT Auth, Oauth2 Auth)
  6. Мониторинг работы приложения (Zipkin, OpenTelemetry)
  7. Интеграция с различными протоколами как STOMP, SMTP и так далее.
  8. Shell — оболочка выполнения задач сервером.
  9. Интерфейс для разработки TCP, HTTP и UDP серверов и клиентов.
  10. Интерфейс для работы с файловой системой.
  11. Launcher запускающий приложение из архива jar.
  12. Реактивное программирование приложения при поддержке (RxJava 1, RxJava 2, RxJava 3, Mutiny)

Запуск http-сервера на Java:

import io.vertx.core.AbstractVerticle;

public class Server extends AbstractVerticle {
  public void start() {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello from Vert.x!");
    }).listen(8080);
  }
}
  1. Eclipse Vert.x 4.3.1 released! Дата обращения: 28 июня 2022. Архивировано 26 мая 2022 года.
  2. Eclipse Vert.x 4 beta 1. Дата обращения: 28 июля 2020. Архивировано 19 мая 2021 года.
https://github.com/vert-x3 - GitHub страница проекта.
https://github.com/vert-x3/wiki/wiki/4.0.3-Release-Notes - Последние изменения в релизе.