12.5. Netty ランタイムの設定

概要

Netty ランタイムは、切り離されたエンドポイントを使用して HTTP サービスプロバイダーおよび HTTP コンシューマーによって使用されます。ランタイムのスレッドプールは設定でき、Netty ランタイムを介して HTTP サービスプロバイダーのセキュリティー設定を多数設定することもできます。

Maven 依存関係

Apache Maven をビルドシステムとして使用する場合は、プロジェクトの pom.xml ファイルに以下の依存関係を追加し、Netty ランタイムのサーバー側の実装 (Web サービスエンドポイントを定義するため) をプロジェクトに追加できます。

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-netty-server</artifactId>
    <version>${cxf-version}</version>
</dependency>

プロジェクトの pom.xml ファイルに以下の依存関係を含めることで、Netty ランタイムのクライアント側実装 (Web サービスクライアントを定義するため) をプロジェクトに追加できます。

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-netty-client</artifactId>
    <version>${cxf-version}</version>
</dependency>

Namespace

Netty ランタイムの設定に使用される要素は、名前空間 http://cxf.apache.org/transports/http-netty-server/configuration で定義されています。通常、接頭辞 httpn を使用して参照されます。Netty 設定要素を使用するには、例12.17「Netty ランタイム設定名前空間」 にある行をエンドポイント設定ファイルの beans 要素に追加する必要があります。また、設定要素の namespace を xsi:schemaLocation 属性に追加する必要があります。

例12.17 Netty ランタイム設定名前空間

<beans ...
       xmlns:httpn="http://cxf.apache.org/transports/http-netty-server/configuration"
       ...
       xsi:schemaLocation="...
               http://cxf.apache.org/transports/http-netty-server/configuration
            http://cxf.apache.org/schemas/configuration/http-netty-server.xsd
               ...">

engine-factory 要素

httpn:engine-factory 要素は、アプリケーションによって使用される Netty ランタイムを設定するために使用されるルート要素です。1 つの必須属性 bus があります。この値は、設定される Netty インスタンスを管理する Bus の名前です。

注記

値は通常、デフォルトの Bus インスタンスの名前である cxf です。

httpn:engine-factory 要素には、Netty ランタイムファクトリーによってインスタンス化された HTTP ポートの設定に使用される情報が含まれる 3 つの子があります。子は、表12.11「Netty ランタイムファクトリーを設定するための要素」 で説明されています。

表12.11 Netty ランタイムファクトリーを設定するための要素

要素説明

httpn:engine

特定の Netty ランタイムインスタンスの設定を指定します。「engine 要素」を参照してください。

httpn:identifiedTLSServerParameters

HTTP サービスプロバイダーを保護するための再利用可能なプロパティーのセットを指定します。これには、プロパティーセットを参照できる一意の識別子を指定する単一の属性 id があります。

httpn:identifiedThreadingParameters

Netty インスタンスのスレッドプールを制御するための再利用可能なプロパティーセットを指定します。これには、プロパティーセットを参照できる一意の識別子を指定する単一の属性 id があります。

「スレッドプールの設定」を参照してください。

engine 要素

httpn:engine 要素は、Netty ランタイムの特定のインスタンスを設定するために使用されます。表12.12「Netty ランタイムインスタンスを設定するための属性」 は、httpn:engine 要素によってサポートされる属性を示します。

表12.12 Netty ランタイムインスタンスを設定するための属性

属性説明

port

Netty HTTP サーバーインスタンスによって使用されるポートを指定します。port 属性に 0 の値を指定できます。port 属性が 0 に設定された状態で engine 要素に指定されたスレッドプロパティーは、明示的に設定されていないすべての Netty リスナーの設定として使用されます。

host

Netty HTTP サーバーインスタンスによって使用されるリッスンアドレスを指定します。値はホスト名または IP アドレスになります。指定されていない場合、Netty HTTP サーバーはすべてのローカルアドレスをリッスンします。

readIdleTime

Netty 接続の最大読み取りアイドル時間を指定します。タイマーは、基礎となるストリームに読み取りアクションがある場合は常にリセットされます。

writeIdleTime

Netty 接続の最大書き込みアイドル時間を指定します。タイマーは、基礎となるストリームに書き込みアクションがある場合は常にリセットされます。

maxChunkContentSize

Netty 接続の集約された最大コンテンツサイズを指定します。デフォルト値は 10MB です。

httpn:engine 要素には、セキュリティープロパティーを設定する子要素が 1 つあります。また、Netty インスタンスのスレッドプールを設定するための 1 つの子要素。設定の各タイプに対して、設定情報を直接提供するか、親 httpn:engine-factory 要素で定義された設定プロパティーのセットへの参照を指定できます。

httpn:engine でサポートされる子要素が 表12.13「Netty ランタイムインスタンスを設定するための要素」 に表示されます。

表12.13 Netty ランタイムインスタンスを設定するための要素

要素説明

httpn:tlsServerParameters

特定の Netty インスタンスに使用されるセキュリティーを設定するための一連のプロパティーを指定します。

httpn:tlsServerParametersRef

identifiedTLSServerParameters 要素によって定義されたセキュリティープロパティーのセットを参照します。id 属性は、参照される identifiedTLSServerParameters 要素の ID を提供します。

httpn:threadingParameters

特定の Netty インスタンスが使用するスレッドプールのサイズを指定します。「スレッドプールの設定」を参照してください。

httpn:threadingParametersRef

identifiedThreadingParameters 要素によって定義されるプロパティーのセットを参照します。id 属性は、参照される identifiedThreadingParameters 要素の ID を提供します。

httpn:sessionSupport

true の場合、HTTP セッションのサポートを有効にします。デフォルトは false です。

httpn:reuseAddress

ReuseAddress TCP ソケットオプションを設定するブール値を指定します。デフォルトは false です。

スレッドプールの設定

Netty インスタンスのスレッドプールのサイズは、次のいずれかで設定できます。

  • engine-factory 要素の identifiedThreadingParameters 要素を使用して、スレッドプールのサイズを指定します。次に、tthreadingParametersRef 要素を使用して要素を参照します。
  • threadingParameters 要素を使用して、スレッドプールのサイズを直接指定します。

threadingParameters 要素には、表12.14「Netty スレッドプールを設定するための属性」 で説明されているようにスレッドプールのサイズを指定する 1 つの属性があります。

注記

httpn:identifiedThreadingParameters 要素には、単一の子 threadingParameters 要素があります。

表12.14 Netty スレッドプールを設定するための属性

属性説明

threadPoolSize

Netty インスタンスがリクエストを処理するために使用できるスレッドの数を指定します。

例12.18「Netty インスタンスの設定」 は、さまざまな Netty ポートを設定する設定フラグメントを示しています。

例12.18 Netty インスタンスの設定

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:h="http://cxf.apache.org/transports/http/configuration"
       xmlns:httpn="http://cxf.apache.org/transports/http-netty-server/configuration"
       xmlns:sec="http://cxf.apache.org/configuration/security"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/configuration/security
            http://cxf.apache.org/schemas/configuration/security.xsd
        http://cxf.apache.org/transports/http/configuration
            http://cxf.apache.org/schemas/configuration/http-conf.xsd
        http://cxf.apache.org/transports/http-netty-server/configuration
            http://cxf.apache.org/schemas/configuration/http-netty-server.xsd"
>
    ...
    <httpn:engine-factory bus="cxf">
       <httpn:identifiedTLSServerParameters id="sample1">
         <httpn:tlsServerParameters jsseProvider="SUN" secureSocketProtocol="TLS">
            <sec:clientAuthentication want="false" required="false"/>
         </httpn:tlsServerParameters>
       </httpn:identifiedTLSServerParameters>

       <httpn:identifiedThreadingParameters id="sampleThreading1">
          <httpn:threadingParameters threadPoolSize="120"/>
       </httpn:identifiedThreadingParameters>

       <httpn:engine port="9000" readIdleTime="30000" writeIdleTime="90000">
          <httpn:threadingParametersRef id="sampleThreading1"/>
       </httpn:engine>

       <httpn:engine port="0">
          <httpn:threadingParameters threadPoolSize="400"/>
       </httpn:engine>

       <httpn:engine port="9001" readIdleTime="40000" maxChunkContentSize="10000">
         <httpn:threadingParameters threadPoolSize="99" />
         <httpn:sessionSupport>true</httpn:sessionSupport>
       </httpn:engine>

       <httpn:engine port="9002">
         <httpn:tlsServerParameters>
           <sec:clientAuthentication want="true" required="true"/>
         </httpn:tlsServerParameters>
       </httpn:engine>

       <httpn:engine port="9003">
          <httpn:tlsServerParametersRef id="sample1"/>
       </httpn:engine>

    </httpn:engine-factory>
</beans>