1. Обзор
В этом руководстве мы рассмотрим основные функциональные возможности среды Apache Meecrowave .
Meecrowave — это облегченная среда микросервисов от Apache , которая очень хорошо работает с CDI, JAX-RS и JSON API. Его очень просто настроить и развернуть. Это также устраняет проблемы с развертыванием тяжелых серверов приложений, таких как Tomcat, Glassfish, Wildfly и т. д.
2. Зависимость от Maven
Чтобы использовать Meecrowave, давайте определим зависимость в pom.xml:
<dependency>
<groupId>org.apache.meecrowave</groupId>
<artifactId>meecrowave-core</artifactId>
<version>1.2.1</version>
</dependency>
Проверьте наличие последней версии на Maven Central .
3. Запуск простого сервера
Я приказываю запустить сервер Meecrowave, все, что нам нужно сделать, это написать основной
метод, создать экземпляр Meecrowave
и вызвать основной метод 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.Builder
:
Meecrowave.Builder builder = new Meecrowave.Builder();
builder.setHttpPort(8080);
builder.setScanningPackageIncludes("com.foreach.meecrowave");
builder.setJaxrsMapping("/api/*");
builder.setJsonpPrettify(true);
И используйте этот экземпляр компоновщика
при запекании сервера:
try (Meecrowave meecrowave = new Meecrowave(builder)) {
meecrowave.bake().await();
}
Здесь больше настраиваемых свойств .
4. Конечные точки REST
Теперь, когда сервер готов, давайте создадим несколько конечных точек 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. Тестирование
Написание тестовых примеров для REST API, написанных с помощью Meecrowave, так же просто, как написание аннотированных тестовых случаев JUnit.
Давайте сначала добавим тестовые зависимости в наш pom.xml
:
<dependency>
<groupId>org.apache.meecrowave</groupId>
<artifactId>meecrowave-junit</artifactId>
<version>1.2.1</version>
<scope>test</scope>
</dependency>
Чтобы увидеть последнюю версию, проверьте Maven Central .
Также давайте добавим OkHttp в качестве HTTP-клиента для наших тестов:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
Ознакомьтесь с последней версией здесь .
Теперь, когда зависимости установлены, давайте напишем тесты:
@RunWith(MonoMeecrowave.Runner.class)
public class ArticleEndpointsIntegrationTest {
@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
, а также введите конфигурацию, чтобы получить доступ к случайному порту, используемому Meecrowave для тестового сервера.
6. Внедрение зависимостей
Чтобы внедрить зависимости в класс , нам нужно аннотировать эти классы в определенной области.
Возьмем пример класса ArticleService
:
@ApplicationScoped
public class ArticleService {
public Article createArticle(Article article) {
return article;
}
}
Теперь давайте добавим это в наш экземпляр ArticleEndpoints
, используя аннотацию javax.inject.Inject
:
@Inject
ArticleService articleService;
7. Упаковка приложения
Создание дистрибутива становится очень простым с плагином Meecrowave Maven:
<build>
...
<plugins>
<plugin>
<groupId>org.apache.meecrowave</groupId>
<artifactId>meecrowave-maven-plugin</artifactId>
<version>1.2.1</version>
</plugin>
</plugins>
</build>
Как только у нас будет установлен плагин, давайте воспользуемся целью Maven meecrowave: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 Meecrowave для создания микросервиса. Кроме того, мы рассмотрели некоторые базовые настройки приложения и подготовили дистрибутив.
Как всегда, фрагменты кода можно найти в Github Project .