Рубрики
Без рубрики

Создание микросервиса с помощью Apache Microwave

Узнайте, как использовать Apache Microwave для создания микросервиса

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы рассмотрим основные функциональные возможности платформы Apache Microwave .

Microwave-это легкий фреймворк микросервисов от Apache , который очень хорошо работает с CDI, JAX-RS и API JSON. Его очень просто настроить и развернуть. Это также устраняет хлопоты по развертыванию тяжелых серверов приложений, таких как Tomcat, Glassfish, Wildfly и т. Д.

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

Чтобы использовать микроволновку, давайте определим зависимость в pom.xml:


    org.apache.meecrowave
    meecrowave-core
    1.2.1

Проверьте наличие последней версии на Maven Central .

3. Запуск простого сервера

Я приказываю запустить микроволновый сервер, все, что нам нужно сделать, это написать метод main , создать экземпляр Microwave и вызвать метод main bake () :

public static void main(String[] args) {
    try (Meecrowave meecrowave = new Meecrowave()) {
        meecrowave.bake().await();
    }
}

Нам не нужен этот основной метод, если мы упаковываем приложение в виде дистрибутивного пакета; мы рассмотрим это в последующих разделах. Основной класс полезен при тестировании приложения из среды IDE.

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

Обратите внимание, что если мы используем Java 9, не забудьте добавить модули javax .xml.bind в виртуальную машину:

--add-module javax.xml.bind

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

Meecrowave.Builder builder = new Meecrowave.Builder();
builder.setHttpPort(8080);
builder.setScanningPackageIncludes("com.baeldung.meecrowave");
builder.setJaxrsMapping("/api/*");
builder.setJsonpPrettify(true);

И используйте этот экземпляр builder во время выпечки сервера:

try (Meecrowave meecrowave = new Meecrowave(builder)) { 
    meecrowave.bake().await();
}

Есть более настраиваемые свойства здесь .

4. Конечные точки ОТДЫХА

Теперь, как только сервер будет готов, давайте создадим несколько конечных точек REST:

@RequestScoped
@Path("article")
public class ArticleEndpoints {
    
    @GET
    public Response getArticle() {
        return Response.ok().entity(new Article("name", "author")).build();      
    }
    
    @POST 
    public Response createArticle(Article article) { 
        return Response.status(Status.CREATED).entity(article).build(); 
    }
}

Обратите внимание, что мы в основном используем аннотации JAX-RS для создания конечных точек REST . Подробнее о JAX-RS читайте здесь .

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

5. Модульное тестирование

Написание модульных тестовых случаев с помощью API for REST, написанных с помощью Microwave, так же просто, как написание аннотированных тестовых случаев JUnit.

Давайте добавим тестовые зависимости в ваш pom.xml первый:


    org.apache.meecrowave
    meecrowave-junit
    1.2.1
    test

Чтобы увидеть последнюю версию, проверьте Maven Central .

Кроме того, давайте добавим Ok Http в качестве HTTP-клиента для наших тестов:


    com.squareup.okhttp3
    okhttp
    3.10.0

Ознакомьтесь с последней версией здесь .

Теперь с зависимостями на месте давайте продолжим и напишем тесты:

@RunWith(MonoMeecrowave.Runner.class)
public class ArticleEndpointsTest {
    
    @ConfigurationInject
    private Meecrowave.Builder config;
    private static OkHttpClient client;
    
    @BeforeClass
    public static void setup() {
        client = new OkHttpClient();
    }
    
    @Test
    public void whenRetunedArticle_thenCorrect() {
        String base = "http://localhost:" + config.getHttpPort();
        
        Request request = new Request.Builder()
          .url(base + "/article")
          .build();
        Response response = client.newCall(request).execute();
        assertEquals(200, response.code());
    }
}

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

6. Инъекция Зависимостей

Чтобы внедрить зависимости в класс , нам нужно аннотировать эти классы в определенной области.

Давайте возьмем пример Article Service class:

@ApplicationScoped
public class ArticleService {
    public Article createArticle(Article article) {
        return article;
    }
}

Теперь давайте введем это в наш экземпляр ArticleEndpoints с помощью javax.inject.Ввести аннотацию :

@Inject
ArticleService articleService;

7. Упаковка приложения

Создание дистрибутивного пакета становится очень простым с помощью плагина Meecrowave Maven:


    ...
    
        
            org.apache.meecrowave
            meecrowave-maven-plugin
            1.2.1
        
    

Как только у нас будет плагин, давайте используем цель Maven microwave:bundle для упаковки приложения .

После упаковки он создаст zip внутри целевого каталога:

meecrowave-meecrowave-distribution.zip

Этот zip содержит необходимые артефакты для развертывания приложения:

|____meecrowave-distribution
| |____bin
| | |____meecrowave.sh
| |____logs
| | |____you_can_safely_delete.txt
| |____lib
| |____conf
| | |____log4j2.xml
| | |____meecrowave.properties

Давайте перейдем в каталог bin и запустим приложение:

./meecrowave.sh start

Чтобы остановить приложение:

./meecrowave.sh stop

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

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

Как всегда, фрагменты кода можно найти в проекте Github .