squbs - 5. akka HTTP 클 라 이언 트 의 스테로이드 (Steroids)
개략
squbs-httpclient
프로젝트 는 Akka Http API 를 유지 하면 서 Akka HTTP Host - Level Client - Side API 에 조작 가능 한 부분 을 추 가 했 습 니 다. 다음은 추 가 된 기능 의 목록 입 니 다.paymentserv
. application.conf
의 기본 값 을 단독으로 덮어 쓸 수 있 도록 합 니 다 의지 하 다
build. sbt 또는 scala 구축 파일 에 다음 과 같은 의존 도 를 추가 합 니 다.
"org.squbs" %% "squbs-httpclient" % squbsVersion
사용법
squbs - httpclient 프로젝트 는 Akka HTTP API 를 고수 합 니 다.유일한 예외 일 때 호스트 연결 풀 을 만 드 는 동안대신
Http().cachedHostConnectionPool
매개 변수 정의 ClientFlow
(선택 가능 한 매개 변수) 를 사용 합 니 다.implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
// construct a pool client flow with context type `Int`
val poolClientFlow = ClientFlow[Int]("sample") // Only this line is specific to squbs
val responseFuture: Future[(Try[HttpResponse], Int)] =
Source.single(HttpRequest(uri = "/") -> 42)
.via(poolClientFlow)
.runWith(Sink.head)
또한, Akka HTTP Host - Level Client - Side API 와 유사 한 예
ClientFlow
는 JAVA 에서 다음 과 같이 사용 합 니 다.final ActorSystem system = ActorSystem.create();
final ActorMaterializer mat = ActorMaterializer.create(system);
final Flow, Pair, Integer>, HostConnectionPool>
clientFlow = ClientFlow.create("sample", system, mat);
CompletionStage, Integer>> =
Source
.single(Pair.create(request, 42))
.via(clientFlow)
.runWith(Sink.head(), mat);
HTTP 모델
Scala
다음은
HttpRequest
Scala 의 생 성 예 입 니 다. 더 많은 것 은 HTTP Model Scala documentation 을 참조 하 십시오.import HttpProtocols._
import MediaTypes._
import HttpCharsets._
val userData = ByteString("abc")
val authorization = headers.Authorization(BasicHttpCredentials("user", "pass"))
HttpRequest(
PUT,
uri = "/user",
entity = HttpEntity(`text/plain` withCharset `UTF-8`, userData),
headers = List(authorization),
protocol = `HTTP/1.0`)
Java
다음은
HttpRequest
자바 의 생 성 예 입 니 다. Http Model 자바 documentation 을 보십시오.import HttpProtocols.*;
import MediaTypes.*;
Authorization authorization = Authorization.basic("user", "pass");
HttpRequest complexRequest =
HttpRequest.PUT("/user")
.withEntity(HttpEntities.create(ContentTypes.TEXT_PLAIN_UTF8, "abc"))
.addHeader(authorization)
.withProtocol(HttpProtocols.HTTP_1_0);
서비스 발견 체인
풀 을 만 들 때
squbs-httpclient
호스트 이름 / 포트 조합 을 제공 할 필요 가 없습니다.대신 등록 서비스 발견 체인 을 허용 하고 등록 서비스 발견 체 제 를 통 해 string 식별 자 를 통 해 점 (endpoint) 을 분석 할 수 있 습 니 다.예 를 들 어 위의 예 에서 "sample"
클 라 이언 트 가 방문 하고 자 하 는 서비스의 논리 적 이름 입 니 다. 설 정 된 서비스 발견 체인 은 호스트 이름과 포트 를 포함 하 는 터미널 (endpoint) 로 분 석 됩 니 다. 예 를 들 어 http://akka.io:80
.여기에 두 개의 서로 다른 등록 점 해석 기 는 다음 과 같다.폐쇄 적 인 스타일 은 더욱 치밀 하고 읽 을 수 있 는 코드 를 허용 합 니 다.그러나 이 자 류 는 상 태 를 유지 하고 이 상 태 를 바탕 으로 결정 하 는 능력 을 가지 고 있다.
Scala
등록 함수 종류
(String, Env) => Option[Endpoint]
:EndpointResolverRegistry(system).register("SampleEndpointResolver", { (svcName, env) =>
svcName match {
case "sample" => Some(Endpoint("http://akka.io:80"))
case "google" => Some(Endpoint("http://www.google.com:80"))
case _ => None
})
등록 류 계승
EndpointResolver
:class SampleEndpointResolver extends EndpointResolver {
override def name: String = "SampleEndpointResolver"
override def resolve(svcName: String, env: Environment): Option[Endpoint] = svcName match {
case "sample" => Some(Endpoint("http://akka.io:80"))
case "google" => Some(Endpoint("http://www.google.com:80"))
case _ => None
}
}
// Register EndpointResolver
EndpointResolverRegistry(system).register(new SampleEndpointResolver)
Java
등록
BiFunction>
:EndpointResolverRegistry.get(system).register("SampleEndpointResolver", (svcName, env) -> {
if ("sample".equals(svcName)) {
return Optional.of(Endpoint.create("http://akka.io:80"));
} else if ("google".equals(svcName))
return Optional.of(Endpoint.create("http://www.google.com:80"));
} else {
return Optional.empty();
}
});
등록 클래스 계승
AbstractEndpointResolver
:class SampleEndpointResolver extends AbstractEndpointResolver {
String name() {
return "SampleEndpointResolver";
}
Optional resolve(svcName: String, env: Environment) {
if ("sample".equals(svcName)) {
return Optional.of(Endpoint.create("http://akka.io:80"));
} else if ("google".equals(svcName))
return Optional.of(Endpoint.create("http://www.google.com:80"));
} else {
return Optional.empty();
}
}
// Register EndpointResolver
EndpointResolverRegistry.get(system).register(new SampleEndpointResolver());
너 는 여러 개
EndpointResolver
를 등록 할 수 있다.이 체인 은 등 록 된 역순 에 따라 집행 된다.해석 기 가 되 돌아 오 면 None
설명 할 수 없 음 을 의미 하 며, 다음 해석 기 는 설명 을 시도 합 니 다.설명 한 점 (endpoint) 이 안전 하 다 면 (https) 는 SSLContext
을 Endpoint
에 전달 할 수 있다.클 라 이언 트 마다 설정 (Per Client Configuration)
Akka HTTP Configuration 은 설정 의 기본 값 을 정의 합 니 다.기본 값 을
application.conf
에 다시 쓸 수 있 습 니 다.그러나 이렇게 하면 모든 클 라 이언 트 에 영향 을 줄 수 있다.특정 클 라 이언 트 의 재 작성 을 합 니 다. HostConnectionPool
스 트림 이 생 성 될 때 Akka HTTP 는 HostConnectionPool
스 트림 생 성 기간 에 전달 할 수 있 습 니 다 ConnectionPoolSettings
.이것 도 역시 squbs 가 지지한다.이 외 에 도 squbs 는 클 라 이언 트 의 특정 재 작성
application.conf
을 허용 합 니 다.클 라 이언 트 이름 을 통 해 type = squbs.httpclient
설정 부분 만 제시 해 야 합 니 다.그리고 이 부분 에서 모든 클 라 이언 트 설정 을 제시 할 수 있 습 니 다.예 를 들 어 만약 에 우리 가 위 "sample"
클 라 이언 트 중의 max-connections
설정 만 다시 쓰 려 면 우 리 는 다음 과 같이 할 수 있다.sample {
type = squbs.httpclient
akka.http.host-connection-pool {
max-connections = 10
}
}
파이프 (파이프라인)
우 리 는 일반적으로 공용 기초 기능 이나 서로 다른 클 라 이언 트 의 조직 기준 이 필요 하 다.이러한 인 프 라 시설 은 로그, 지표 핸드폰, 추적 요청, 인증 \ 권한 수여, 추적, 쿠키 관리, A / B 테스트 등 을 포함한다.squbs 가 관심 분 리 를 촉진 하기 때문에 이러한 논 리 는 클 라 이언 트 가 아 닌 기본 설정 에 속 합 니 다.squbs pipeline 은 인 프 라 시설 에서 구성 요 소 를 제공 하고 클 라 이언 트 에 설치 할 수 있 으 며 클 라 이언 트 소유 자 는 이런 부분 을 걱정 할 필요 가 없습니다.더 자세 한 것 은 squbs pipeline 을 볼 수 있 습 니 다.
일반적으로 하나의 pipeline 은 양 방향 흐름 으로 squbs 클 라 이언 트 와 Akka HTTP 층 의 다 리 를 구축 했다.
squbs-httpclient
모든 클 라 이언 트 또는 개별 클 라 이언 트 에 전역 양 방향 흐름 (기본 pipeline) 을 등록 할 수 있 습 니 다.특정 클 라 이언 트 pipeline 을 등록 하고 설정 pipeline
설정 합 니 다.defaultPipeline
설정 을 통 해 기본 pipeline 을 열 거나 닫 을 수 있 습 니 다 (지정 되 지 않 으 면 on
로 설정 할 수 있 습 니 다.sample {
type = squbs.httpclient
pipeline = metricsFlow
defaultPipeline = on
}
squbs pipeline 을 참조 하여 pipeline 을 만 드 는 방법 과 기본 pipeline 을 설정 하 는 방법 을 보십시오.
지표 (Metrics)
squbs 는 사전 컴 파일 pipeline 지표 집합 을 가지 고 있 으 며, squbs 활성화 템 플 릿 은 이 를 기본 값 으로 설정 합 니 다.따라서 코드 변경 이나 설정 이 필요 하지 않 습 니 다. 모든 squbs http 클 라 이언 트 는 Codahale Metrics 를 수집 하여 사용 할 수 있 습 니 다.기본적으로 JMX 는 다음 과 같은 지 표를 제공 합 니 다.
ClientFlow
. 되 돌아 오 는 모든 이상 유형의 계량기 고장 제거 문 제 는 시각 화 시스템 설정 이 매우 중요 하 다.
squbs-httpclient
각 클 라 이언 트 에 JMX bean 을 등록 했다.JMX bean 은 터미널 (endpoint), 호스트 연결 풀 설정 등 모든 설정 을 발표 합 니 다.bean 의 이름 설정 org.squbs.configuration.${system.name}:type=squbs.httpclient,name=$name
.따라서 actor 시스템 이름 이 squbs
이 고 클 라 이언 트 이름 이 sample
이면 JMX bean 의 이름 은 org.squbs.configuration.squbs:type=squbs.httpclient,name=sample
입 니 다.Circuit Breaker
// TODO In progress
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.