243장. Netty4 HTTP 구성 요소


Camel 버전 2.14로 사용 가능

netty4-http 구성 요소는 Netty4 를 사용하여 HTTP 전송을 능가하는 Netty4 구성 요소의 확장입니다.

이 camel 구성 요소는 생산자 및 소비자 엔드 포인트를 모두 지원합니다.

정보: 스트림. Netty는 스트림 기반이며, 이는 수신하는 입력이 Camel에 스트림으로 제출됨을 의미합니다. 즉, 스트림의 내용을 한 번 만 읽을 수 있습니다. 메시지 본문이 비어 있거나 데이터(예: 멀티 캐스트 작업 또는 재전송 오류 처리 수행)에 액세스해야 하는 경우 Stream 캐싱을 사용하거나 메시지 본문을 여러 번 안전하게 다시 읽을 수 있는 문자열로 변환해야 합니다. Netty4 HTTP는 io.netty.handler.codec.http.HttpObjectAggregator 를 사용하여 전체 스트림을 메모리로 읽고 전체 http 메시지를 작성합니다. 그러나 결과 메시지는 여전히 한 번 읽을 수 있는 스트림 기반 메시지입니다.

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>

INFO: 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]

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

INFO: 쿼리 매개변수와 끝점 옵션. 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)를 사용하여 끝점 옵션을 지정할 수 없습니다. 엔드포인트 옵션은 엔드포인트 URI 정의 수준(예: DSL 요소) 에서 만 지정 수 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.