История 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 Реализация следующих свойств:
Кластеризация через Hazelcast, Infinispan и так далее. Тестирование через JUnit 5 Подключение к разным Базам Данных(JDBC, MySQL, PostgreSQL, DB2, MSSQL, MongoDB, Redis, Cassandra) Очереди сообщений (Kafka, RabbitMQ, AMQP, MQTT) Авторизация через сторонние службы (JWT Auth, Oauth2 Auth) Мониторинг работы приложения (Zipkin, OpenTelemetry) Интеграция с различными протоколами как STOMP, SMTP и так далее. Shell — оболочка выполнения задач сервером. Интерфейс для разработки TCP, HTTP и UDP серверов и клиентов. Интерфейс для работы с файловой системой. Launcher запускающий приложение из архива jar. Реактивное программирование приложения при поддержке (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);
Ссылки
https://github.com/vert-x3 - GitHub страница проекта. https://github.com/vert-x3/wiki/wiki/4.0.3-Release-Notes - Последние изменения в релизе.
Категория:Свободное программное обеспечение, написанное на Java