Перейти к основному содержимому

Введение в микросервисы Java с MSF4J

· 6 мин. чтения

1. Обзор

В этом руководстве мы продемонстрируем разработку микросервисов с использованием фреймворка MSF4J . ****

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

2. Зависимости Maven

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

<parent>
<groupId>org.wso2.msf4j</groupId>
<artifactId>msf4j-service</artifactId>
<version>2.6.0</version>
</parent>

<properties>
<microservice.mainClass>
com.foreach.msf4j.Application
</microservice.mainClass>
</properties>

Последнюю версию msf4j-service можно найти на Maven Central.

Далее мы покажем три различных сценария микросервисов. Сначала минималистичный пример, затем RESTful API и, наконец, пример интеграции Spring.

3. Базовый проект

3.1. Простой API

Мы собираемся опубликовать простой веб-ресурс.

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

Возвращаемый тип контента — это обычный текст:

@Path("/")
public class SimpleService {

@GET
public String index() {
return "Default content";
}

@GET
@Path("/say/{name}")
public String say(@PathParam("name") String name) {
return "Hello " + name;
}
}

И помните, что все используемые классы и аннотации — это просто стандартные элементы JAX-RS , которые мы уже рассмотрели в этой статье .

3.2. Заявление

Мы можем запустить микросервис с этим основным классом , где мы устанавливаем, развертываем и запускаем сервис, определенный ранее:

public class Application {
public static void main(String[] args) {
new MicroservicesRunner()
.deploy(new SimpleService())
.start();
}
}

Если мы хотим, мы можем связать здесь вызовы deploy для одновременного запуска нескольких сервисов:

new MicroservicesRunner()
.deploy(new SimpleService())
.deploy(new ComplexService())
.start()

3.3. Запуск микросервиса

Для запуска микросервиса MSF4J у нас есть несколько вариантов:

  1. В среде IDE, работающей как приложение Java.
  2. Запуск сгенерированного пакета jar

После запуска вы можете увидеть результат по адресу http://localhost:9090 .

3.4. Конфигурации запуска

Мы можем настроить конфигурацию множеством способов, просто добавив некоторые пункты в код запуска.

Например, мы можем добавить любой перехватчик для запросов:

new MicroservicesRunner()
.addInterceptor(new MetricsInterceptor())
.deploy(new SimpleService())
.start();

Или мы можем добавить глобальный перехватчик, например, для аутентификации:

new MicroservicesRunner()
.addGlobalRequestInterceptor(newUsernamePasswordSecurityInterceptor())
.deploy(new SimpleService())
.start();

Или, если нам нужно управление сессиями, мы можем установить менеджер сессий:

new MicroservicesRunner()
.deploy(new SimpleService())
.setSessionManager(new PersistentSessionManager())
.start();

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

4. Создание микросервиса API

Мы показали простейший возможный пример. Теперь перейдем к более реалистичному проекту.

На этот раз мы покажем, как создать API со всеми типичными операциями CRUD для управления хранилищем еды.

4.1. Модель

Модель представляет собой простое POJO, представляющее еду:

public class Meal {
private String name;
private Float price;

// getters and setters
}

4.2. API

Мы создаем API как веб-контроллер. Используя стандартные аннотации, мы устанавливаем для каждой функции следующее:

  • URL-адрес
  • Метод HTTP: GET, POST и т. д.
  • ввод ( @Consumes ) тип содержимого
  • вывод ( @Produces ) тип контента

Итак, давайте создадим метод для каждой стандартной операции CRUD:

@Path("/menu")
public class MenuService {

private List<Meal> meals = new ArrayList<Meal>();

@GET
@Path("/")
@Produces({ "application/json" })
public Response index() {
return Response.ok()
.entity(meals)
.build();
}

@GET
@Path("/{id}")
@Produces({ "application/json" })
public Response meal(@PathParam("id") int id) {
return Response.ok()
.entity(meals.get(id))
.build();
}

@POST
@Path("/")
@Consumes("application/json")
@Produces({ "application/json" })
public Response create(Meal meal) {
meals.add(meal);
return Response.ok()
.entity(meal)
.build();
}

// ... other CRUD operations
}

4.3. Функции преобразования данных

MSF4J предлагает поддержку различных библиотек преобразования данных , таких как GSON (по умолчанию) и Jackson (через зависимость функции msf4j ). Например, мы можем явно использовать GSON:

@GET
@Path("/{id}")
@Produces({ "application/json" })
public String meal(@PathParam("id") int id) {
Gson gson = new Gson();
return gson.toJson(meals.get(id));
}

Кстати , обратите внимание, что мы использовали фигурные скобки в аннотациях @Consumes и @Produces , поэтому мы можем установить более одного типа mime.

4.4. Запуск микросервиса API

Мы запускаем микрослужбу так же, как и в предыдущем примере, через класс Application , который публикует MenuService .

После запуска вы можете увидеть результат по адресу http://localhost:9090/menu.

5. MSF4J и Весна

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

5.1. Зависимости Maven

Нам нужно будет добавить соответствующие зависимости к предыдущей конфигурации Maven, чтобы добавить поддержку Spring и Mustache:

<dependencies>
<dependency>
<groupId>org.wso2.msf4j</groupId>
<artifactId>msf4j-spring</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.wso2.msf4j</groupId>
<artifactId>msf4j-mustache-template</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>

Последнюю версию msf4j-spring и msf4j-mustache-template можно найти на Maven Central.

5.2. API еды

Этот API представляет собой простой сервис, использующий репозиторий фиктивных блюд. Обратите внимание, как мы используем аннотации Spring для автоматического подключения и установки этого класса в качестве сервисного компонента Spring.

@Service
public class MealService {

@Autowired
private MealRepository mealRepository;

public Meal find(int id) {
return mealRepository.find(id);
}

public List<Meal> findAll() {
return mealRepository.findAll();
}

public void create(Meal meal) {
mealRepository.create(meal);
}
}

5.3. Контроллер

Мы объявляем контроллер как компонент, а Spring предоставляет услугу посредством автоматического подключения. Первый метод показывает, как обслуживать шаблон Mustache, а второй — ресурс JSON:

@Component
@Path("/meal")
public class MealResource {

@Autowired
private MealService mealService;

@GET
@Path("/")
public Response all() {
Map map = Collections.singletonMap("meals", mealService.findAll());
String html = MustacheTemplateEngine.instance()
.render("meals.mustache", map);
return Response.ok()
.type(MediaType.TEXT_HTML)
.entity(html)
.build();
}

@GET
@Path("/{id}")
@Produces({ "application/json" })
public Response meal(@PathParam("id") int id) {
return Response.ok()
.entity(mealService.find(id))
.build();
}

}

5.4. Основная программа

В сценарии Spring мы запускаем микросервис следующим образом:

public class Application {

public static void main(String[] args) {
MSF4JSpringApplication.run(Application.class, args);
}
}

После запуска мы можем увидеть результат по адресу http://localhost:8080/meals. Порт по умолчанию отличается в проектах Spring, но мы можем установить любой порт, который захотим.

5.5. Компоненты конфигурации

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

Например, этот изменяет порт по умолчанию для микросервиса:

@Configuration
public class PortConfiguration {

@Bean
public HTTPTransportConfig http() {
return new HTTPTransportConfig(9090);
}

}

6. Заключение

В этой статье мы представили платформу MSF4J, применяющую различные сценарии для создания микросервисов на основе Java.

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

Кроме того, для дальнейшего чтения взгляните на создание микросервисов с помощью Eclipse Microprofile и, конечно же, наше руководство по микросервисам Spring с Spring Boot и Spring Cloud .

И, наконец, все примеры здесь можно найти в репозитории GitHub .