WSO2 WSF4J란? README.md 번역
WSO2 마이크로 서비스 프레임워크 (MSF4J)
WSO2 Microservices Framework for Java (MSF4J)는 마이크로 서비스를 개발 및 실행하기 위한 경량의 고성능 프레임 워크입니다.
WSO2 MSF4J는 최고 성능의 경량 Java 마이크로 서비스 프레임 워크 중 하나입니다. 다음 그래프는 다른 마이크로 서비스 프레임 워크에 대한 MSF4J의 처리량, 메모리 소비 및 대기 시간 특성을 보여줍니다.
1KB 요청을 즉시 Echo하고 임시 파일을 사용하는 에코 서비스가 각 프레임 워크 용으로 개발되었으며 요청은 다른 동일한 값으로 전송되었습니다. 이 테스트는 각 프레임 워크의 각 동일한 값에 대해 반복되었고 평균 처리량이 계산되었습니다. 테스트는 기본적으로 JVM v1.8.0_60의 32 코어 64GB 서버에서 아무런 튜닝없이 실행되었습니다.
각 프레임 워크에서 1KB 페이로드 에코 마이크로 서비스를 실행하고 서로 다른 동일한 수준에서 여러 요청을 전송 한 후 메모리 사용이 관찰되었습니다. 위의 그래프는 각 프레임 워크에 대해 여러 번 실행 한 후 평균 된 값을 보여줍니다.
대기 시간 결과는 아파치 벤치에서 제공된 백분위 값을 사용하여 관찰되었습니다. 결과는 단순한 에코 테스트와 같은 다양한 동일한 수준에 대해 나타내었습니다.
테스트는 기본적으로 JVM v1.8.0_60의 32 코어 64GB 서버에서 아무런 튜닝없이 실행되었습니다.
성능 테스트에 대한 자세한 내용은 여기를 참조하십시오 .
Helloworld with MSF4J
WSO2 MSF4J를 사용하여 자바 마이크로 서비스를 정의하고 배포하는 것은 정말 쉽습니다.
한줄의 간단한 어노테이션만으로 서비스를 개발하고 배포할 수 있습니다.
MSF4J Helloworld 마이크로 서비스를 만들어 보겠습니다.
msf4j – microservice의 메이븐을 사용하여 첫 MSF4J 프로젝트를 만들 수 있습니다. JDK 1.8 및 Maven 3.x가 설치되어 있는지 확인하고 다음 명령을 실행하십시오.
mvn archetype:generate -DarchetypeGroupId=org.wso2.msf4j \ -DarchetypeArtifactId=msf4j-microservice -DarchetypeVersion=2.6.2 \ -DgroupId=org.example -DartifactId=Hello-Service -Dversion=0.1-SNAPSHOT \ -Dpackage=org.example.service -DserviceClass=HelloService
이렇게하면 신속하게 프로젝트 구조가 생성됩니다. 그런 다음 Hello-Service 디렉토리로 이동하십시오. pom.xml 파일과 src 디렉토리를 찾을 수 있습니다.
pom.xml
이 pom 파일은 msf4j-service / pom.xml에서 상속됩니다. 최소한의 구성으로 빠르게 설정하는 방법을 제공합니다. 자세한 내용을 보려면 여기를 클릭 하십시오 .
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.wso2.msf4j</groupId> <artifactId>msf4j-service</artifactId> <version>2.6.2</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>Hello-Service</artifactId> <version>0.1-SNAPSHOT</version> <name>WSO2 MSF4J Microservice</name> <properties> <microservice.mainClass>org.example.service.Application</microservice.mainClass> </properties> </project>
이 pom.xml 파일에서 아무 것도 변경할 필요가 없습니다.
HelloService.java
다음과 같이 org.example.service.HelloService 클래스를 변경하여 이름 입력 매개 변수를 에코 출력하십시오.
자동 생성 된 코드를 제거하고 다음 코드로 바꿀 수 있습니다.
package org.example.service; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @Path("/hello") public class HelloService { @GET @Path("/{name}") public String hello(@PathParam("name") String name) { return "Hello " + name; } }
Application.java
WSO2 MSF4J를 사용하여 서비스를 배포하는 방법입니다.
public class Application { public static void main(String[] args) { new MicroservicesRunner() .deploy(new HelloService()) .start(); } }
MicroservicesRunner 클래스 생성자에 대한 인수로 포트를 전달할 수도 있습니다. 인수로 포트를 전달할 때 기본적으로 포트는 0.0.0.0 호스트에 바인드됩니다. “msf4j.host”환경 변수를 사용하여 호스트 값을 오버라이드 하세요.
서비스 구축
다음 Maven 명령을 실행하십시오. 이것은 target 디렉토리로 무거운 Jar를 만듭니다.
Hello-Service – 0.1-SNAPSHOT.jar
mvn package
이 무거운 jar는 마이크로 서비스의 모든 의존성을 담고있는 jar 파일입니다.
서비스 실행
서비스를 시작하고 실행하려면 다음 명령을 실행합니다.
java -jar target/Hello-Service-*.jar
cURL을 사용하여 서비스 테스트
다음 명령을 실행하거나 브라우저에서 [http : // localhost : 8080 / hello / wso2] ( http : // localhost : 8080 / hello / wso2 )로 이동하십시오.
curl http://localhost:8080/hello/wso2
“Hello wso2″가 출력되어야 합니다.
지원되는 주석
이 섹션에서는 MSF4J 마이크로 서비스에 사용 된 주석을 살펴 보겠습니다.
우리는 JAXRS 어노테이션의 일부를 지원합니다.
Class level annotations
@Path
resource method의 루트 경로. 리소스 메소드에 지정된 모든 경로는이 하위 경로가됩니다.
@Consumes
기본값은 resource method의 media type을 사용합니다. @Consume annotation을 지정하지 않은 resource method는 이 media type을 사용합니다.
@Produces
기본값은 resource method의 media type을 생성합니다. @Produce 어노테이션을 지정하지 않은 resource method는 이 media type을 상속합니다.
Method level annotations
@Path
컨테이너 리소스 클래스의 @Path를 기준으로 한 resource method의 엔드포인트입니다.
@Consumes
메소드가 소비 할 수있는 media type. 이렇게하면 클래스 수준 @Consumes media type이 재정의됩니다.
@Produces
메소드에 의해 생성 된 media type. 이 클래스 수준을 재정의합니다. @Produces media typep을 만듭니다.
@GET
HTTP GET method. Specify that the resource method supports HTTP GET method.
@PUT
HTTP PUT method. Specify that the resource method supports HTTP PUT method.
@POST
HTTP POST method. Specify that the resource method supports HTTP POST method.
@DELETE
HTTP DELETE method. Specify that the resource method supports HTTP DELETE method.
@HEAD
HTTP HEAD method. Specify that the resource method supports HTTP HEAD method.
@OPTIONS
HTTP OPTIONS method. Specify that the resource method supports HTTP OPTIONS method.
Parameter level annotations
@DefaultValue
resource method parameter의 기본값을 지정하십시오. 값은 해당 매개 변수의 유형으로 자동 변환됩니다.
@Context
추가 오브젝트를 resource method에 삽입하십시오. 현재 다음 객체의 주입을 지원합니다.
- org.wso2.msf4j.Request -이 객체를 사용하여 HTTP 요청의 속성에 액세스 할 수 있습니다. 전송 세션 (org.wso2.msf4j.Session)은 org.wso2.msf4j.Request # getSession ()을 통해 액세스 할 수도 있습니다. 세션 인식 서비스 샘플을 참조하십시오 .
- org.wso2.msf4j.Response -이 객체는 HTTP 응답을 보내는 데 사용할 수 있습니다. javax.ws.rs.core.Response 또는 POJO의 인스턴스를 반환하여 응답을보다 명확하게 만들 수 있습니다. [StockQuote-Service] (샘플 / 주식 시세 / fatjar) 샘플을 참조하십시오.
- org.wso2.msf4j.HttpStreamer -이 객체는 청크(가공되지 않은) 된 요청 본문을 스트리밍하고 요청이 스트리밍되는 동안 처리합니다. FileServer 샘플을 참조하십시오 .
- org.wso2.msf4j.formparam.FormParamIterator -이 객체는 HTML 양식 제출 요청 본문을 스트리밍하고 요청이 스트리밍되는 동안 처리합니다. FormParam 샘플을 참조하십시오 .
@PathParam
/ StockQuote / {symbol}은 symbol 값을 가져옵니다. 값은 자동으로 해당 매개 변수 유형으로 변환되고 해당 매개 변수에 지정됩니다.
@QueryParam
/Students?age=18. 값은 자동으로 해당 매개 변수 유형으로 변환되고 해당 매개 변수에 지정됩니다.
@HeaderParam
HTTP 요청 헤더 값을 읽습니다. 값은 자동으로 해당 매개 변수 유형으로 변환되고 해당 매개 변수에 지정됩니다.
@CookieParam
지정된 쿠키에서 값을 추출하고 해당 매개 변수 유형으로 변환 한 후 값을 해당 매개 변수에 지정합니다.
@FormParam
application / x-www-form-urlencoded 및 multipart / form-data로 HTML 양식 제출을 지원하려면 값이 자동으로 해당 매개 변수 유형으로 변환되고 해당 매개 변수에 지정됩니다
@FormDataParam
다중 파트 / 양식 데이터 콘텐츠 유형으로 복잡한 양식 제출을 지원합니다. 예 : 파일 업로드 및 빈. 값은 자동으로 해당 매개 변수 유형으로 변환되고 해당 매개 변수에 지정됩니다
Lifecycle Callback Methods
Java 라이프 사이클 콜백 메소드 주석을 지원.
@PostConstruct
모든 종속성 주입이 완료되고 전송이 시작되기 전에 새로 생성 된 서비스 인스턴스에 대해 컨테이너가 호출합니다.
@PreDestroy
컨테이너가 서비스 인스턴스를 제거하기 전에 서버가 종료되는 동안 컨테이너가 호출합니다.
자세한 예제는 여기 에서 라이프 사이클 샘플을 확인 하십시오 .
MSF4J Interceptors
자세한 지침은 다음을 참조하십시오.
- General instructions
- MSF4J Interceptors – Stand alone mode instructions
- MSF4J Interceptors – Deployable Jar mode instructions
- MSF4J Interceptors – OSGi mode instructions
- MSF4J Interceptors with MSF4J Spring – Fat Jar mode
Spring 프레임 워크를 사용하여 MSF4J 서비스 개발 및 구성
Spring은 DI (Dependency Injection) 및 컨벤션 오버 규칙과 같은 개념을 지원하는 널리 사용되는 Java 애플리케이션 개발 프레임 워크입니다. MSF4J에 대한 Spring 지원은 다음과 같은 기능을 제공합니다.
- 스프링 빈으로 MSF4J 서비스 개발
- Spring을 사용하여 인터셉터 및 ExceptionMappers와 같은 MSF4J 구성 요소를 개발하고 구성합니다.
- Annotation 또는 XML 기반 Spring 구성을 사용하여 포트, SSL 등과 같은 MSF4J 프레임 워크의 내부 구성
다음 예제는 MSF4J 주석과 함께 Spring 주석을 사용하여 RESTful 서비스를 작성하는 방법을 보여줍니다. 여기서 가장 큰 장점은 서비스 개발자가 Spring에서 의존성 주입, Spring AOP 등의 Spring 기능을 사용할 수 있다는 점입니다.
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.ws.rs.GET; import javax.ws.rs.Path; @Component @Path("/greeting") public class Hello { @Autowired private HelloService helloService; @GET public String message() { return helloService.hello(" World"); } }
자세한 내용은 Spring Helloworld 샘플을 참조하십시오 .
Annotations for Analytics
이 섹션에서는 Analytics 목적의 MSF4J 마이크로 서비스에 사용할 수있는 주석을 살펴 보겠습니다. 메트릭 및 HTTP 모니터링에 대한 주석이 있습니다.
Metrics 및 HTTP 모니터링 이벤트를 WSO2 Data Analytics Server (DAS)에 게시하려면 analytics 를 구성해야합니다 .
메트릭스 데이터는 주기적으로 WSO2 DAS에 게시됩니다. 그러나 HTTP 모니터링 이벤트는 각 요청마다 게시됩니다.
자세한 예제는 Metrics and HTTP Monitoring 샘플을 확인하십시오 .
측정 항목 주석
MSF4J 마이크로 서비스의 메트릭 주석을 사용하여 마이크로 서비스가 프로덕션 환경에서 어떻게 작동하는지 이해할 수 있습니다.
세 가지 통계 주석이 지원됩니다. 그것들은 @Counted, @Metered 및 @Timed입니다.
각 메트릭에는 고유 한 이름이 있어야하며 MSF4J는 기본적으로 메트릭 이름으로 정규화 된 메서드 이름을 사용합니다. “name”매개 변수를 사용하여 사용자 정의 이름을 지정할 수 있습니다. 이 사용자 정의 이름은 완전한 메소드 이름에 점 문자로 추가됩니다. 지정된 이름 만 메트릭 이름으로 사용하려면 “절대”매개 변수를 “true”로 설정할 수 있습니다.
예를 들어 메트릭 런타임에서 최종 메트릭 이름을 작성하는 방법을 이해하려면 다음 표를 참조하십시오. 주석이 위에 표시된 “HelloService”의 “hello”메소드에 추가되었다고 가정 해 봅시다.
Metrics Annotation | Metric Name |
---|---|
@Counted | org.example.service.HelloService.hello |
@Counted (name = “helloCounter”) | org.example.service.HelloService.hello.helloCounter |
@Counted (name = “helloCounter”, absolute = true) | helloCounter |
메트릭 주석은 메서드 수준 및 클래스 수준에서 사용할 수 있습니다.
Metrics Annotations에서 레벨을 구성 할 수도 있습니다. 지표 수준에 대한 자세한 내용은 WSO2 Carbon Metrics를 참조하십시오 . MSF4J에서 명명 된 시스템 속성을 통해 메트릭 수준 구성을 로드 할 수 있습니다 metrics.level.conf
.
@Counted
메소드 호출을 셈. “monotonic”이라는 매개 변수가 있으며 기본적으로 false로 설정됩니다. 즉, 메서드가 반환 될 때 카운터가 감소합니다. 이것은 주석 된 메소드의 현재 호출을 계산할 때 유용합니다.
@Counted(monotonic = true)
카운터를 단조롭게 증가하려는 경우에 사용하십시오 . 이 메소드는 주석이 달린 메소드의 총 호출 수를 세는 데 유용합니다.
@ Metered
메소드 호출 비율을 측정하십시오. 이것은 주석 된 메소드의 총 호출 수를 유지합니다.
@ Timed
각 메소드 호출의 기간에 대한 막대 그래프를 유지 보수하십시오. 또한 메소드 호출 비율을 측정하고 주석이 달린 메소드의 총 호출 수를 유지합니다.
HTTP 모니터링 주석
각 HTTP 요청을 모니터하고 “HTTP 모니터링 대시 보드”에서 요약을 보려면 HTTP 모니터링에 제공된 주석을 사용할 수 있습니다.
@HTTPMonitored
각 HTTP 요청을 모니터하십시오. 이 어노테이션은 클래스 레벨과 메소드 레벨에서 사용될 수 있습니다.
HTTP 메시지 추적
MSF4J는 WSO2 DAS 또는 Zipkin의 사용자 친화적 인 대시 보드를 통해 시각적 메시지 추적을 지원합니다. MSF4J 메시지 추적은 시스템의 복잡한 마이크로 서비스 상호 작용에 대한 상세한 통찰력을 제공하여 모니터링, 문제 해결 및 마이크로 서비스 최적화를 매우 쉽게 만듭니다. 자세한 내용은 WSO2 DAS Tracing 및 Zipkin Tracing 샘플을 확인하십시오.
스웨거 주석
Swagger 는 소스 코드, 문서 또는 네트워크 트래픽 검사를 통해 액세스하지 않고도 사람과 컴퓨터 모두가 서비스 기능을 검색하고 이해할 수있게 해주는 REST API에 대한 표준적이고 언어에 구애받지 않는 인터페이스입니다.
MSF4J는 모든 Swagger 주석을 즉시 지원합니다 .
Swagger 지원을 사용하려면 프로젝트에 다음 종속성을 추가해야합니다.
<dependency> <groupId>org.wso2.msf4j</groupId> <artifactId>msf4j-swagger</artifactId> <version>2.6.2</version> </dependency>
마이크로 서비스의 Swagger 정의를 검색하려면
http : // <host> : <port> / swagger? path = <service_base_path>로 이동하십시오.
예 : http : // localhost : 8080 / swagger? path = / hello
런타임에 모든 마이크로 서비스의 Swagger 정의를 검색하려면 http : // <host> : <port> / swagger로 이동하십시오.
예 : http : // localhost : 8080 / swagger
참고 : Swagger 주석이 없어도 MSF4J 마이크로 서비스의 JAXRS 주석을 사용하여 기본 Swagger 정의가 생성됩니다.
StockQuote 샘플은 Swagger 어노테이션의 데모를 보여줍니다.
ExceptionMapper
MSF4J는 MSF4J 서비스에서 예외가 발생할 때 사용자 지정 응답을 만들 수있는 JAXRS ExceptionMapper 를 지원 합니다.
StockQuote 샘플은 ExceptionMapper의 데모를 보여줍니다.
다음 코드 세그먼트는 ExceptionMappers가 MSF4J 런타임에 등록되는 방법을 보여줍니다.
new MicroservicesRunner().addExceptionMapper(new SymbolNotFoundMapper(), new DuplicateSymbolMapper());
Circuit Breaker
Nygard의 서킷 브레이커 패턴은 Netflix Hystrix 라이브러리를 사용하는 MSF4J에서 지원됩니다. 자세한 내용은 Circuit breaker sample을 참조하십시오.
Complete Feature List
- 어노테이션 기반의 마이크로 서비스 정의
- 고성능 Netty 기반 전송
- Swagger API 정의에서 시작하는 마이크로 서비스 개발을위한 WSO2 Developer Studio 기반 툴
- Swagger 주석을 사용하여 Swagger 정의 생성
- Spring 프레임 워크를 사용하여 MSF4J 서비스를 개발하고 구성하는 기능
- javax.ws.rs.core.StreamingOutput 지원을 비롯한 HTTP 요청 및 응답 스트리밍.
- ExceptionMapper
- WSO2 Data Analytics Server (DAS) 대시 보드를 사용하여 메트릭 및 메트릭 시각화 지원
- microservices 상호 작용에 대한 상세한 시각적 분석을 얻기 위해 WSO2 DAS 또는 Zipkin을 사용한 메시지 추적
- Netflix Hystrix를 사용하여 서킷 브레이커를 지원합니다.
- 마이크로 서비스 보안 지원
- Mustache와 같은 렌더링 엔진과의 통합
- 마이크로 서비스 기반 솔루션을 개발하는 방법을 시연하는 포괄적인 샘플
최근 댓글