Всем привет! В этой статье мы продемонстрируем основные компоненты для создания микросервисов RESTful с использованием реестра служб Consul, Spring Boot для всех форм формирования, внедрения зависимостей, Maven для сборки, а также Spring REST и Java RESTful API Jersey/JaxRS. Ключевые преимущества микросервисов:
- Микросервисы позволяют отделить ваш код
- Микросервисы позволяют различным командам работать над небольшими частями, используя независимые технологии, что обеспечивает более безопасное и частое развертывание.
Spring Boot поддерживает различные реализации для создания REST API.
- Обнаружение и вызов сервисов не зависят от сервисной платформы.
- Swagger создает надежную документацию по API и интерфейс вызова.
За последние два десятилетия предприятие стало очень гибким в нашем процессе SDLC, но наши приложения, как правило, по-прежнему остаются монолитными, с огромными jar-файлами, поддерживающими все различные API и версии, представленные на рынке.
Но в настоящее время наблюдается стремление к более экономичному подходу, DevOps-процессам и функциям, которые становятся «бессерверными».
Рефакторинг с использованием микросервисов может уменьшить связанность кода и ресурсов, делая сборки меньшими, выпуски более безопасными, а API более стабильными.
В этой статье мы создадим простое приложение для управления портфелем акций на фондовом рынке, которое клиенты смогут вызвать, чтобы оценить свой портфель акций (тикеры и значения акций).
Микросервис портфеля извлечет портфель клиента, отправит его в микросервис ценообразования для применения последних цен, а затем вернет полностью оцененный и промежуточный портфель, раскрывая все это через вызов rest.
Прежде чем мы начнем работать над созданием наших микросервисов, давайте подготовим нашу среду, настроив Consul.
Скачать Консул
Мы будем использовать Hashicorp Consul для обнаружения сервисов, поэтому перейдите к www.consul.io/downloads.html и загрузите Consul для Windows, Linux, Mac и т. д. Это предоставит вам исполняемый файл, который можно добавить в свой путь.
Запуск Консула
В командной строке запустите Consul в режиме разработки:Чтобы убедиться, что он работает, зайдите в браузер и откройте интерфейс консула.consul agent -dev
Если все пройдет хорошо, консул должен сообщить, что он жив и здоров.
Нажав на консульскую услугу (слева), вы получите дополнительную информацию (справа).
Если на этом этапе возникнут какие-либо проблемы, убедитесь, что вы добавили Consul в путь выполнения и порты 8500 и 8600 доступны.
Создайте приложение SpringBoot
Мы будем использовать Весенняя инициализация , который интегрирован в большинство IDE, для создания наших приложений SpringBoot. На скриншотах ниже используется IntelliJ IDEA. Выберите «Файл/Новый проект», чтобы открыть новый шаблон проекта, а затем «Spring Initializr».
В общем, вы можете настроить scaffolding без IDE, заполнив онлайн-форму на веб-странице SpringBoot Initializr. start.spring.io , который создаст zip-файл вашего пустого проекта, готовый к загрузке.
Нажмите «Далее» и заполните метаданные проекта.
Используйте следующую конфигурацию:
Нажмите «Далее», чтобы выбрать зависимости, и введите «Джерси» и «Consul Discovery» в поиск зависимостей.
Добавьте эти зависимости:
Нажмите «Далее», чтобы указать имя и местоположение проекта.
Оставьте имя по умолчанию «Портфолио» и укажите предпочтительное местоположение проекта, затем нажмите «Готово», чтобы создать и открыть проект:
Мы можем использовать сгенерированный файл 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
-
Информатика И Составление Договоров
19 Oct, 24 -
Школа Технологов Риска
19 Oct, 24 -
Список Белорусских Социальных Сетей
19 Oct, 24 -
Что Следует Прочитать Об Angular 2
19 Oct, 24 -
Циклы C И Go И Простая Математика
19 Oct, 24