Micronaut io install on windows

Micronaut: фреймворк на JVM, который вы определённо полюбите

Рассказывает Роман Иванов

Микросервисная архитектура набирает обороты, многие хотят повторить опыт Netflix и создать надёжное и великолепно масштабируемое приложение.

Основные требования к микросервисной архитектуре можно свести к двум — скорость и надёжность. Поэтому главная задача, которую старались решить создатели Micronaut, — сделать его более легковесным, чем Spring Boot, и тем самым более быстрым.

Разберёмся подробнее, что из себя представляет данный фреймворк, какие у него преимущества и как создавать на нём микросервисы.

Для эффективного создания микросервисов в фреймворк уже включён HTTP-сервер и контейнер зависимостей, создающийся во время компиляции.

22 апреля в 19:00, Онлайн, Беcплатно

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

Был поставлен под сомнение основной инструмент бизнес-фреймворков — рефлексия, которая используется для инъекции зависимостей и генерации различных прокси-классов на лету. Подобные технологии требуют большого количества ресурсов от виртуальной Java-машины, поэтому они влекут за собой проблемы с производительностью — чрезмерно большое количество действий во время старта и использование памяти в рантайме сильно влияет на запуск.

Создатели фреймворка Micronaut решили пойти другим путём: вобрав в своё творение лучшие практики уже существующих решений, они добавили новый контейнер DI/AOP, который внедряет зависимости во время компиляции, а не во время выполнения. Тем самым львиная доля зависимостей разрешается ещё до запуска приложения. То есть ещё до запуска приложения фреймворк Micronaut просканирует весь код на наличие аннотаций, попытается сгенерировать дополнительные классы, необходимые для правильного исполнения кода, и наполнит ими свой контекст.

Так как в Micronaut всё это произойдёт ещё до старта приложения, время запуска и потребление памяти не находятся в прямой зависимости от количества кода, в отличие от рантайм-фреймворка Spring Boot, который повсеместно использует рефлексию.

Платформы IoC на основе рефлексии загружают и кешируют данные для каждого отдельного поля, метода и конструктора в коде. Таким образом, по мере того как ваш код увеличивается в размере, увеличиваются и требования к памяти.

Сами разработчики считают основополагающими следующие принципы разработки фреймворка:

  • использовать рефлексию только в самых «безвыходных» случаях;
  • избегать прокси;
  • максимально оптимизировать время старта;
  • максимально уменьшать занимаемую память.

Так как Micronaut задумывался изначально как фреймворк для облачных приложений, вместе с ним идёт «джентльменский» набор нативных облачных решений для создания полноценной инфраструктуры: поддержка паттернов Service discovery и Circuit Breaker, трассировки запросов, распределённого логирования, балансировки нагрузки, асинхронных очередей — Kafka и RabitMQ, реактивного HTTP и стандартов JWT и OAuth2.

Читайте также:  Топ ажурными узорами venetian windows

В этом материале будет показано, как быстро реализовать всю эту мощь всего в пару строк.

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

HTTP-сервер

В Micronaut включён быстрый, гибкий и высокопроизводительный HTTP-сервер Netty. Достаточно пары строк, чтобы запустить приложение и начать обрабатывать запросы.

Пример программы «Hello World» ниже:

Всё выглядит точь в точь, как если бы программа была написана с использованием Spring.

Создать клиентский запрос так же просто:

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

Но Netty реактивный, поэтому создатели рекомендуют писать контроллер и клиент следующим образом:

Service Discovery

Фреймворк уже поддерживает популярные решения Eureka и Consul.

Чтобы добавить свой сервис в Eureka, даже не нужно добавлять аннотации в предыдущий пример, достаточно подключить зависимость runtime: «io.micronaut:micronaut-discovery-client»

И прописать в конфигурации параметры сервера:

Если установлена переменная окружения ( EUREKA_HOST ), будет использована она, в противном случае соединение будет устанавливаться с локальной машиной.

Балансировка нагрузки

Когда регистрируется несколько экземпляров одной и той же службы, Micronaut предоставляет форму «циклического» распределения нагрузки, по очереди запрашивая доступные экземпляры, чтобы гарантировать, что ни один экземпляр не будет перегружен или использован не достаточно эффективно. Это форма балансировки нагрузки на стороне клиента, когда каждый экземпляр либо принимает запрос, либо передаёт его следующему экземпляру службы, автоматически распределяя нагрузку между доступными экземплярами. Такое распределение происходит в целом без дополнительных ресурсозатрат.

Micronaut также предоставляет нативную поддержку Netflix Ribbon. Для запуска балансировщика на стороне приложения необходимо выполнить пару простых действий.

Добавить зависимость compile «io.micronaut.configuration:micronaut-netflix-ribbon»

И указать настройку для Ribbon:

Circuit Breaker

При взаимодействии с другими службами в распределённой системе неизбежно наступит момент, когда удалённый сервис временно перестанет работать или будет отвечать ошибкой на любой запрос. Micronaut предлагает ряд инструментов помогающих восстановить связь. Например, любой метод в Micronaut может быть аннотирован с помощью @Retryable , чтобы применить настраиваемую политику повторов к методу. По умолчанию будет выполнено три запроса к другому сервису с перерывом в одну секунду. Количество попыток соединения и время ожидания между попытками можно настроить:

Но данные параметры лучше не менять, а находить причины задержек.

Более сложной формой @Retryable является аннотация @CircuitBreaker . Она не позволит конкретному сервису начать постоянное «бомбардирование» удалённого сервиса запросами, давая ему время восстановиться. То есть после нескольких неудачных попыток отправки запроса, следующие запросы будут сразу возвращены с ошибкой.

Трассировка запросов

Поддержка Zipkin уже внедрена во фреймворк. Для её добавления не нужно никакого дополнительного кода, всё уже сделано создателями.
Добавляем в файл настроек:

И можем начать собирать информацию о наших микросервисах.

Работа с брокерами сообщений

Так как в микросервисном мире очень важен обмен асинхронными сообщениями, фреймворк нативно поддерживает такие решения как Kafka и RabiitMQ. Рассмотрим взаимодействие с первым. Добавляем зависимость в сборку:
compile ‘io.micronaut.configuration:micronaut-kafka’

И настроим адрес сервера в YML-конфигурации:

Всё, мы готовы работать с одним из быстрейших асинхронных брокеров сообщений в мире.

Создаём клиент, который будет отправлять сообщения в очереди:

Читайте также:  Настройка центра сертификации windows server 2016

Фреймворк создаст класс, который мы можем забрать из контекста и отправить сообщение:

Принимать сообщения так же просто:

Мониторинг активности

При запуске приложения на основе микросервисного архитектурного решения важно знать, в каком состоянии находятся все микросервисы. Для этого в Micronaut уже из коробки реализованы эндпоинты, по которым можно получить информацию о сервисе:

URI Описание
/beans Возвращает информацию о загруженных бинах.
/health Возвращает информацию об общем текущем состоянии сервиса.
/loggers Возвращает информацию о доступных логгерах и позволяет изменять настроенный уровень журналирования.

Вывод

Таким образом, Micronaut уже из коробки поддерживает множество инструментов, сильно упрощающих жизнь создателю любого микросервиса, а его отчасти инновационный подход к созданию контейнера бинов и разрешению зависимостей во время компиляции даёт ему неоспоримое преимущество перед главным конкурентом — Spring Boot.

Micronaut Launch

Generates Micronaut applications

Version:

1 Introduction

This project implements a project generator for Micronaut as is both a Command Line (CLI) application and an API that can be run as a HTTP server, deployed to a Servlet container or executed on a Serverless platform (Google Cloud Run, Google Cloud Function, AWS Lambda or Azure Function).

2 Installation

2.1 Install with SDKman

The best way to install Micronaut on Unix systems is with SDKMAN which greatly simplifies installing and managing multiple Micronaut versions.

Before updating make sure you have latest version of SDKMAN installed. If not, run

In order to install Micronaut, run following command:

You can also specify the version to the sdk install command.

You can find more information about SDKMAN usage on the SDKMAN Docs

You should now be able to run the Micronaut CLI.

2.2 Install with Homebrew

In order to install Micronaut, run following command:

You can find more information about Homebrew usage on their homepage.

You should now be able to run the Micronaut CLI.

2.3 Install with MacPorts

Before installing it is recommended to sync the latest Portfiles.

In order to install Micronaut, run following command:

You can find more information about MacPorts usage on their homepage.

You should now be able to run the Micronaut CLI.

2.4 Install with Chocolatey

If using Windows, you can use Chocolatey to install the Micronaut CLI:

Check the micronaut package page for more information.

You should now be able to run the Micronaut CLI from the command prompt or Powershell by running mn :

2.5 Install through Binary on Windows

Download the latest binary from Micronaut Website

Extract the binary to appropriate location (For example: C:\micronaut )

Create an environment variable MICRONAUT_HOME which points to the installation directory i.e. C:\micronaut

Update the PATH environment variable, append %MICRONAUT_HOME%\bin .

You should now be able to run the Micronaut CLI from the command prompt as follows:

2.6 Build & Install from Source

Clone the repository as follows:

cd into the micronaut-starter directory and run the following command:

This will create a zip distribution of the CLI (named with the current version) in the starter-cli/build/dist/ folder.

You’ll need to unzip this somewhere convenient. For example, to unzip it to a dot directory in your user home, you could do:

Читайте также:  Api ms win crt runtime l1 1 0 dll windows server 2012

In your shell profile (

/.bash_profile if you are using the Bash shell), export the MICRONAUT_HOME directory (wherever you unzipped it to) and add the CLI path to your PATH :

If you’re using SDKMAN and don’t want to mess with your $MICRONAUT_HOME, you can also point SDKMAN to your local installation for dev purposes by using sdk install micronaut dev path/to/unzipped/cli

Reload your terminal or source your shell profile with source :

You are now be able to run the Micronaut CLI.

3 Release History

2.0.0.M3

Initial Milestone Release

4 Available commands

mn — Micronaut CLI command line interface for generating projects and services.

Synopsis

mn [-hvVx] [COMMAND]

Description

Micronaut CLI command line interface for generating projects and services. Application generation commands are:

create-app NAME

create-cli-app NAME

create-function-app NAME

create-grpc-app NAME

create-messaging-app NAME

Options

Show this help message and exit.

-v, —verbose

Create verbose output.

-V, —version

Print version information and exit.

-x, —stacktrace

Show full stack trace when exceptions occur.

Commands

Creates an application

create-cli-app

Creates a CLI application

create-function-app

Creates a Cloud Function

create-grpc-app

Creates a gRPC application

create-messaging-app

Creates a messaging application

create-app

mn-create-app — Creates an application

Synopsis

mn create-app [-hivVx] [—list-features] [-b=BUILD-TOOL] [—jdk= ] [-l=LANG] [-t=TEST] [-f=FEATURE[,FEATURE…​]]…​ [NAME]

Description

Creates an application

Options

Which build tool to configure. Possible values: gradle, gradle_kotlin, maven.

-f, —features=FEATURE[,FEATURE…​]

The features to use. Possible values: jdbc-hikari, jdbc-dbcp, jdbc-ucp, jdbc-tomcat, dekorate-kubernetes, github-workflow-oracle-oci-functions, reactor, springloaded, spring-data-jpa, github-workflow-azure-container-instance-graalvm, dekorate-prometheus, aws-parameter-store, security-jwt, micrometer-wavefront, aws-v2-sdk, views-thymeleaf, mqtt, slf4j-simple, micrometer-new-relic, jrebel, github-workflow-google-cloud-run-graalvm, mqttv3, azure-function, kafka, jib, redis-lettuce, jmx, micrometer-ganglia, spring-web, micrometer-graphite, postgres, mockito, tomcat-server, cache-ehcache, coherence-distributed-configuration, github-workflow-azure-container-instance, shade, dekorate-halkyon, views-rocker, management, aws-lambda, neo4j-bolt, micrometer-humio, dekorate-openshift, micrometer-dynatrace, micrometer-appoptics, spring-boot, hibernate-jpa, kotlin-extension-functions, netflix-archaius, rxjava1, assertj, micrometer-signalfx, github-workflow-oracle-oci-functions-graalvm, coherence, jax-rs, neo4j-gorm, micrometer-jmx, aws-alexa, discovery-eureka, liquibase, micrometer-datadog, elasticsearch, acme, mongo-reactive, camunda, oracle, http-session, jooq, hamcrest, sqlserver, openapi, dekorate-servicecatalog, graalvm, mongo-gorm, cassandra, rabbitmq, asciidoctor, config-kubernetes, views-handlebars, kafka-streams, micrometer-elastic, r2dbc, hibernate-gorm, mysql, micrometer-azure-monitor, aws-lambda-custom-runtime, micrometer-stackdriver, micrometer-atlas, jms-activemq-classic, hibernate-validator, http-client, mongo-sync, github-workflow-graal-docker-registry, testcontainers, vertx-pg-client, tracing-jaeger, github-workflow-docker-registry, cache-hazelcast, coherence-session, sql-jdbi, multi-tenancy-gorm, ktor, security, lombok, data-r2dbc, nats, undertow-server, spring-data-jdbc, cache-coherence, tracing-zipkin, h2, netflix-hystrix, github-workflow-google-cloud-run, gcp-pubsub, spring, security-ldap, netty-server, micrometer-kairos, micrometer-cloudwatch, logback, oracle-cloud-sdk, rxjava3, jetty-server, data-jpa, oracle-function, knative, jasync-sql, rss, jackson-xml, gcp-cloud-trace, google-cloud-function, discovery-consul, jms-sqs, vertx-mysql-client, config-consul, multi-tenancy, micrometer-statsd, views-velocity, mariadb, views-pebble, graphql, log4j2, micrometer-influx, rss-itunes-podcast, dekorate-knative, coherence-data, views-freemarker, data-jdbc, flyway, cache-infinispan, micrometer-prometheus, views-soy, coherence-grpc-client, jms-activemq-artemis, netflix-ribbon, cache-caffeine, kubernetes, dekorate-jaeger, security-oauth2, security-session, config4k, properties

-h, —help

Show this help message and exit.

-i, —inplace

Create a service using the current directory

—jdk, —java-version=

The JDK version the project should target

-l, —lang=LANG

Which language to use. Possible values: java, groovy, kotlin.

—list-features

Output the available features and their descriptions

-t, —test=TEST

Which test framework to use. Possible values: junit, spock, kotest.

-v, —verbose

Create verbose output.

-V, —version

Print version information and exit.

-x, —stacktrace

Show full stack trace when exceptions occur.

Оцените статью