Начало Работы С Микросервисами В Spring Boot

Всем привет! В этой статье мы продемонстрируем основные компоненты для создания микросервисов RESTful с использованием реестра служб Consul, Spring Boot для всех форм формирования, внедрения зависимостей, Maven для сборки, а также Spring REST и Java RESTful API Jersey/JaxRS. Ключевые преимущества микросервисов:

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

    Spring Boot поддерживает различные реализации для создания REST API.

  • Обнаружение и вызов сервисов не зависят от сервисной платформы.

  • Swagger создает надежную документацию по API и интерфейс вызова.

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



Начало работы с микросервисами в Spring Boot

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

Но в настоящее время наблюдается стремление к более экономичному подходу, DevOps-процессам и функциям, которые становятся «бессерверными».

Рефакторинг с использованием микросервисов может уменьшить связанность кода и ресурсов, делая сборки меньшими, выпуски более безопасными, а API более стабильными.

В этой статье мы создадим простое приложение для управления портфелем акций на фондовом рынке, которое клиенты смогут вызвать, чтобы оценить свой портфель акций (тикеры и значения акций).

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

Начало работы с микросервисами в Spring Boot

Прежде чем мы начнем работать над созданием наших микросервисов, давайте подготовим нашу среду, настроив Consul.

Скачать Консул

Мы будем использовать Hashicorp Consul для обнаружения сервисов, поэтому перейдите к www.consul.io/downloads.html и загрузите Consul для Windows, Linux, Mac и т. д. Это предоставит вам исполняемый файл, который можно добавить в свой путь.



Запуск Консула

В командной строке запустите Consul в режиме разработки:
  
  
  
  
   

consul agent -dev

Чтобы убедиться, что он работает, зайдите в браузер и откройте интерфейс консула.

http://localhost:8500 .

Если все пройдет хорошо, консул должен сообщить, что он жив и здоров.

Нажав на консульскую услугу (слева), вы получите дополнительную информацию (справа).



Начало работы с микросервисами в Spring Boot

Если на этом этапе возникнут какие-либо проблемы, убедитесь, что вы добавили Consul в путь выполнения и порты 8500 и 8600 доступны.



Создайте приложение SpringBoot

Мы будем использовать Весенняя инициализация , который интегрирован в большинство IDE, для создания наших приложений SpringBoot. На скриншотах ниже используется IntelliJ IDEA. Выберите «Файл/Новый проект», чтобы открыть новый шаблон проекта, а затем «Spring Initializr».



Начало работы с микросервисами в Spring Boot

В общем, вы можете настроить scaffolding без IDE, заполнив онлайн-форму на веб-странице SpringBoot Initializr. start.spring.io , который создаст zip-файл вашего пустого проекта, готовый к загрузке.

Нажмите «Далее» и заполните метаданные проекта.

Используйте следующую конфигурацию:

Начало работы с микросервисами в Spring Boot

Нажмите «Далее», чтобы выбрать зависимости, и введите «Джерси» и «Consul Discovery» в поиск зависимостей.

Добавьте эти зависимости:

Начало работы с микросервисами в Spring Boot

Нажмите «Далее», чтобы указать имя и местоположение проекта.

Оставьте имя по умолчанию «Портфолио» и укажите предпочтительное местоположение проекта, затем нажмите «Готово», чтобы создать и открыть проект:

Начало работы с микросервисами в Spring Boot

Мы можем использовать сгенерированный файл application.properties, но SpringBoot также распознает формат YAML, который немного проще визуализировать, поэтому давайте переименуем его в application.yml. Назовем микросервис «портфолио-сервис».

Мы можем указать порт или использовать порт 0, чтобы приложение использовало доступный порт. В нашем случае мы будем использовать 57116. Если вы размещаете этот сервис как контейнер Docker, вы можете сопоставить его с любым портом по вашему выбору.

Назовите приложение и укажите наш порт, добавив в файл application.yml следующее:

spring: application: name: portfolio-service server: port: 57116

Чтобы сделать наш сервис доступным, мы добавим аннотацию в наш класс приложения SpringBoot. Откройте PortfolioApplication и добавьте @EnableDiscoveryClient над объявлением класса.

Подтвердите импорт. Класс должен выглядеть так:

package com.restms.demo.portfolio; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; .

.

.

@SpringBootApplication @EnableDiscoveryClient public class PortfolioApplication { public static void main(String[] args) { SpringApplication.run(PortfolioApplication.class, args); } }

(Чтобы продемонстрировать, как микросервисы могут состоять из независимых платформ, мы будем использовать Jersey для этого сервиса и Spring REST для следующего).

Чтобы настроить веб-службу RESTful в Джерси, нам нужно указать класс конфигурации ResourceConfig. Добавьте класс JerseyConfig (для демонстрации мы сохраним его в том же пакете, что и наш класс Application).

Это должно выглядеть так, плюс правильный пакет и импорт:

@Configuration @ApplicationPath("portfolios") public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(PortfolioImpl.class); } }

Обратите внимание, что он наследуется от ResourceConfig и обозначает его как класс конфигурации Джерси.

Атрибут @ApplicationPath («портфели») определяет контекст вызова.

Это означает, что вызовы должны начинаться с элемента пути «портфолио».

(Если вы его опустите, контекстом по умолчанию будет «/»).

Класс PortfolioImpl будет обслуживать два запроса: портфели/клиент/{customer-id} возвращает все портфели, а портфели/клиент/{customer-id}/portfolio/{portfolio-id} возвращает один портфель.

Портфель состоит из набора тикеров и количества акций, принадлежащих этому тикеру.

(Для демонстрации есть три клиента с идентификаторами 0, 1 и 2, каждый из которых имеет по три портфеля с идентификаторами 0, 1 и 2).

Ваша IDE попросит вас создать PortfolioImpl; сделай это сейчас.

Для демонстрации добавим его в тот же пакет. Введите код ниже и подтвердите весь импорт:

@Component @Path("/") public class PortfolioImpl implements InitializingBean { private Object[][][][] clientPortfolios; @GET @Path("customer/{customer-id}") @Produces(MediaType.APPLICATION_JSON) // a portfolio consists of an array of arrays, each containing an array of // stock ticker and associated shares public Object[][][] getPortfolios(@PathParam("customer-id") int customerId) { return clientPortfolios[customerId]; } @GET @Path("customer/{customer-id}/portfolio/{portfolio-id}") @Produces(MediaType.APPLICATION_JSON) public Object[][] getPortfolio(@PathParam("customer-id") int customerId, @PathParam("portfolio-id") int portfolioId) { return getPortfolios(customerId)[portfolioId]; } @Override public void afterPropertiesSet() throws Exception { Object[][][][] clientPortfolios = { {

Теги: #api #Microservices #translation #consul #spring boot #swagger

Вместе с данным постом часто просматривают: