1. 개요
이 사용방법(예제)에서는 MSF4J 프레임워크를 사용하여 마이크로서비스 개발을 보여줍니다 .
이것은 고성능에 중점을 둔 다양한 서비스를 쉽게 구축할 수 있는 방법을 제공하는 경량 도구입니다.
2. 메이븐 의존성
MSF4J 기반 마이크로서비스를 빌드하려면 평소보다 약간 더 많은 Maven 구성이 필요합니다. 이 프레임워크의 단순성과 강력함은 대가를 치릅니다. 기본적 으로 기본 클래스뿐만 아니라 상위 artifact 를 정의해야 합니다 .
<parent>
<groupId>org.wso2.msf4j</groupId>
<artifactId>msf4j-service</artifactId>
<version>2.6.0</version>
</parent>
<properties>
<microservice.mainClass>
com.baeldung.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();
}
}
원하는 경우 여기에서 배포 호출을 연결하여 한 번에 여러 서비스를 실행할 수 있습니다 .
new MicroservicesRunner()
.deploy(new SimpleService())
.deploy(new ComplexService())
.start()
3.3. 마이크로서비스 실행
MSF4J 마이크로서비스를 실행하기 위한 몇 가지 옵션이 있습니다.
- IDE에서 Java 애플리케이션으로 실행
- 생성된 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 마이크로서비스 구축
우리는 가능한 가장 간단한 예를 보여주었습니다. 이제 보다 현실적인 프로젝트로 이동하겠습니다.
이번에는 식사 저장소를 관리하기 위해 모든 일반적인 CRUD 작업으로 API를 구축하는 방법을 보여줍니다.
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 마이크로서비스 실행
이전 예제에서와 마찬가지로 MenuService 를 게시하는 Application 클래스를 통해 마이크로서비스를 실행합니다 .
시작하면 http://localhost:9090/menu에서 결과를 볼 수 있습니다.
5. MSF4J와 스프링
또한 MSF4J 기반 마이크로 서비스에 Spring을 적용하여 의존성 주입 기능을 얻을 수 있습니다.
5.1. 메이븐 의존성
Spring 및 Mustache 지원을 추가하려면 이전 Maven 구성에 적절한 의존성을 추가해야 합니다.
<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. 구성 Bean
인터셉터 및 세션 관리를 포함한 특정 설정을 활성화하기 위해 구성 빈을 추가할 수 있습니다.
예를 들어 다음은 마이크로서비스의 기본 포트를 변경합니다.
@Configuration
public class PortConfiguration {
@Bean
public HTTPTransportConfig http() {
return new HTTPTransportConfig(9090);
}
}
6. 결론
이 기사에서는 MSF4J 프레임워크를 소개하고 다양한 시나리오를 적용하여 Java 기반 마이크로 서비스를 구축했습니다.
이 개념에 대해 많은 소문이 있지만 일부 이론적 배경은 이미 설정되었으며 MSF4J는 이 패턴을 적용하는 편리하고 표준화된 방법을 제공합니다.
또한 좀 더 자세히 알아보려면 Eclipse Microprofile을 사용하여 Microservices 구축 및 Spring Boot 및 Spring Cloud를 사용하여 Spring Microservices 에 대한 사용방법(예제)를 살펴보세요 .
마지막으로 여기에 있는 모든 예제는 GitHub 저장소에서 찾을 수 있습니다 .