243장. Netty4 HTTP 구성 요소


Camel 버전 2.14에서 사용 가능

netty4-http 구성 요소는 Netty4 를 사용하여 HTTP 전송을 연결하기 위한 Netty4 구성 요소 확장입니다.

이 camel 구성 요소는 생산자 및 소비자 끝점을 모두 지원합니다.

스트림

Netty는 스트림 기반이므로 수신하는 입력이 스트림으로 Camel에 제출됩니다. 즉, 스트림의 내용을 한 번만 읽을 수 있습니다.

Netty4 HTTP는 전체 http 메시지를 빌드하기 위해 io.netty.handler.codec.http.HttpObjectAggregator 를 사용하여 전체 스트림을 메모리에 읽습니다. 그러나 결과 메시지는 한 번 읽을 수 있는 스트림 기반 메시지입니다.

작은 정보

메시지 본문이 비어 있거나 데이터에 여러 번 액세스해야 하는 경우(예: 멀티 캐스트 작업 또는 오류 처리) 스트림 캐싱을 사용하거나 메시지 본문을 여러 번 다시 읽을 수 있는 문자열로 변환합니다.

Maven 사용자는 이 구성 요소에 대해 pom.xml 에 다음 종속성을 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-netty4-http</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
InputStream

InputStream 을 메시지 본문으로 사용하고 대용량 데이터 스트림(예: > 2GB)을 쓰거나 읽으려면 disableStreamCache 매개변수를 true 로 설정하여 스트리밍 지원을 사용해야 합니다.

예 1: 서버에 대용량 데이터 스트림 업로드

// Upload a large data stream to the server
from("direct:upstream-call")
        .bean(Helper.class, "prepareStream")
        .to("netty-http:http://localhost:{{port}}/upstream?disableStreamCache=true")
        .log("get ${body}");

// Read a large data stream from the client
from("netty-http:http://0.0.0.0:{{port}}/upstream?disableStreamCache=true")
        .bean(Helper.class, "processStream")
        .to("mock:stream-size");

예 2: 서버에서 대용량 데이터 스트림 다운로드

// Download a large data stream from the server
from("direct:download-call")
        .to("netty-http:http://localhost:{{port}}/downstream?disableStreamCache=true")
        .bean(Helper.class, "asyncProcessStream")
        .log("get ${body}");

// Write a large data stream to the client
from("netty-http:http://0.0.0.0:{{port}}/downstream?disableStreamCache=true")
        .bean(Helper.class, "prepareStream");

다운로드 예제에서는 기본 스트림 처리기를 차단하지 않도록 다른 스레드의 InputStream 에서 읽어야 합니다( asyncProcessStream참조).

    public static void processStream(Exchange exchange) throws Exception {
        InputStream is = exchange.getIn().getBody(InputStream.class);

        byte[] buffer = new byte[1024];
        long read = 0;
        long total = 0;
        while ((read = is.read(buffer, 0, buffer.length)) != -1) {
            total += read;
        }

        exchange.getIn().setBody(new Long(total));
    }

    public static CompletableFuture<Void> asyncProcessStream(Exchange exchange) {
        return CompletableFuture.runAsync(() -> {
            try {
                processStream(exchange);
            } catch (Exception e) {
                exchange.setException(e);
            }
        });
    }

243.1. URI 형식

netty 구성 요소의 URI 스키마는 다음과 같습니다.

netty4-http:http://0.0.0.0:8080[?options]

URI에 쿼리 옵션을 추가할 수 있습니다. ?option=value&option=value&…​

참고

쿼리 매개변수 vs 엔드 포인트 옵션. Camel이 URI 쿼리 매개변수 및 엔드포인트 옵션을 인식하는 방법에 대해 확신할 수 있습니다. 예를 들어 다음과 같이 엔드포인트 URI를 생성할 수 있습니다. netty4-http:http//example.com?myParam=myValue&compression=true . 이 예제에서 myParam 은 HTTP 매개변수이고 압축 은 Camel 끝점 옵션입니다. 이러한 상황에서 Camel에서 사용하는 전략은 사용 가능한 엔드포인트 옵션을 해결하고 URI에서 제거하는 것입니다. 이 예제에서는 Netty HTTP 생산자가 끝점으로 보낸 HTTP 요청이 대상 URL에서 해결 및 제거되므로 http//example.com?myParam=myValue 임을 의미합니다. 또한 동적 헤더(예: CamelHttpQuery)를 사용하여 끝점 옵션을 지정할 수 없습니다. 엔드포인트 옵션은 endpoint URI 정의 수준(예: DSL 요소)에서만 지정할 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.