1. Обзор
В этом учебнике мы продемонстрируем развитие микросервисов с использованием системы MSF4J рамочных .
Это легкий инструмент, который обеспечивает простой способ создания широкого спектра услуг, ориентированных на высокую производительность.
2. Мейвен зависимостей
Нам понадобится немного больше конфигурации Maven, чем обычно, чтобы построить микрослужбу на базе MSF4J. Простота и мощь этой структуры действительно имеют свою цену: в основном, мы должны определить родительский артефакт , а также основной класс:
org.wso2.msf4j msf4j-service 2.6.0 com.baeldung.msf4j.Application
Последняя версия msf4j-сервис можно найти на 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(); } }
Если мы хотим, мы можем приковать развертывание звонки здесь для запуска нескольких услуг одновременно:
new MicroservicesRunner() .deploy(new SimpleService()) .deploy(new ComplexService()) .start()
3.3. Запуск микросервиса
Для запуска микрослужбы MSF4J у нас есть несколько вариантов:
- На IDE работает как Java-приложение
- Запуск сгенерированного пакета банки
После начала, вы можете увидеть результат на 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 (
- @Consumes ) выход (
Итак, давайте создадим метод для каждой стандартной операции CRUD:
@Path("/menu") public class MenuService { private Listmeals = new ArrayList (); @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 (который приходит по умолчанию) и Джексон (через 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 аннотация, чтобы мы могли установить более одного типа пантомимы.
4.4. Запуск микросервиса API
Мы запускаем микрослужбу так же, как и в предыдущем примере, через Применение класс, который публикует МенюСервис .
После начала, вы можете увидеть результат на http://localhost:9090/menu.
5. MSF4J и Весна
Мы также можем применить Spring в наших микросервисах на базе MSF4J , из которого мы получим его функции инъекции зависимости.
5.1. Зависимость от Maven
Для добавления поддержки Spring и Mustache нам придется добавить соответствующие зависимости к предыдущей конфигурации Maven:
org.wso2.msf4j msf4j-spring 2.6.1 org.wso2.msf4j msf4j-mustache-template 2.6.1
Последняя версия msf4j-весенний и msf4j-усы-шаблон можно найти на Maven Central.
5.2. API питания
Этот API является простой услугой, используя макет репозитория еды. Обратите внимание, как мы используем весенние аннотации для автоматической проводки и установить этот класс в качестве компонента службы Spring.
@Service public class MealService { @Autowired private MealRepository mealRepository; public Meal find(int id) { return mealRepository.find(id); } public ListfindAll() { return mealRepository.findAll(); } public void create(Meal meal) { mealRepository.create(meal); } }
5.3. Контроллер
Мы объявляем контроллер в качестве компонента и Весна предоставляет услугу через автоматическую проводку. Первый метод показывает, как обслуживать шаблон Усы, а второй ресурс 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. Основная программа
В весеннем сценарии, это, как мы получаем микрослужбы начали:
public class Application { public static void main(String[] args) { MSF4JSpringApplication.run(Application.class, args); } }
После того, как начал, мы можем видеть результат http://localhost:8080/meals. Порт по умолчанию отличается в весенних проектах, но мы можем установить его в любой порт, который мы хотим.
5.5. Конфигурация фасоли
Для включения определенных настроек, включая перехватчики и управление сеансами, мы можем добавить фасоль конфигурации.
Например, этот изменяет порт по умолчанию для микрослужбы:
@Configuration public class PortConfiguration { @Bean public HTTPTransportConfig http() { return new HTTPTransportConfig(9090); } }
6. Заключение
В этой статье мы внедрили фреймвейс MSF4J, применяя различные сценарии для создания микрослужб на основе Java.
Существует много шума вокруг этой концепции, но некоторые теоретические предпосылки уже установлены , и MSF4J обеспечивает удобный и стандартизированный способ применения этого шаблона.
Кроме того, для дальнейшего чтения, взгляните на строительство microservices с Eclipse Microprofile , и, конечно, наше руководство по весенним микросервисам с весенней загрузки и весеннего облака .
И, наконец, все примеры здесь можно найти в репо GitHub .