cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r989092 - in /websites/production/cxf/content: cache/docs.pageCache docs/asynchronous-client-http-transport.html
Date Wed, 25 May 2016 07:47:32 GMT
Author: buildbot
Date: Wed May 25 07:47:32 2016
New Revision: 989092

Log:
Production update by buildbot for cxf

Modified:
    websites/production/cxf/content/cache/docs.pageCache
    websites/production/cxf/content/docs/asynchronous-client-http-transport.html

Modified: websites/production/cxf/content/cache/docs.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/cxf/content/docs/asynchronous-client-http-transport.html
==============================================================================
--- websites/production/cxf/content/docs/asynchronous-client-http-transport.html (original)
+++ websites/production/cxf/content/docs/asynchronous-client-http-transport.html Wed May 25
07:47:32 2016
@@ -116,7 +116,7 @@ Apache CXF -- Asynchronous Client HTTP T
          <td height="100%">
            <!-- Content -->
            <div class="wiki-content">
-<div id="ConfluenceContent"><h1 id="AsynchronousClientHTTPTransport-AsynchronousClientHTTPTransport">Asynchronous
Client HTTP Transport</h1><p>By default, CXF uses a transport based on the in-JDK
HttpURLConnection object to perform HTTP requests. The HttpURLConnection object uses a blocking
model for all IO operations which requires a per-thread execution model. From a pure performance
standpoint, this model generally performs very well, but it does have problems scaling when
many requests need to be executed simultaneously.</p><p>Also, the JAX-WS specification
allows for generation of asynchronous methods on generated proxies as well as using asynchronous
methods on the Dispatch objects. These methods can take an AsyncHandler object and return
a polling Future object so applications do not have to wait for the response. With the HttpURLConnection
based transport, CXF was forced to consume a background thread for each outstanding request.</p><p>CXF
also has an HTTP client transport 
 that is based on the <a shape="rect" class="external-link" href="http://hc.apache.org/httpcomponents-asyncclient-dev/index.html">Apache
HTTP Components HttpAsyncClient</a> library. Its Maven artifactId is&#160;<span
style="line-height: 1.4285715;">cxf-rt-transports-http-hc.</span><span style="line-height:
1.4285715;">&#160;The HttpAsyncClient library uses a non-blocking IO model. This allows
many more requests to be outstanding without consuming extra background threads. It also allows
greater control over things like Keep-Alive handling which is very difficult or impossible
with the HttpURLConnection based transport. However, the non-blocking model does not perform
quite as well as the blocking model for pure synchronous request/response transactions.</span></p><p>By
default, if the cxf-rt-transports-http-hc module is found on the classpath, CXF will use the
HttpAsyncClient based implementation for any Async calls, but will continue to use the HttpURLConnection
based transport for 
 synchronous calls. This allows a good balance of performance for the common synchronous cases
with scalability for the asynchronous cases. However, using a contextual property of "use.async.http.conduit"
and set to true/false, you can control whether the async or blocking version is used. If "true",
the HttpAsyncClient will be used even for synchronous calls, if "false", asynchronous calls
will rely on the traditional method of using HTTPURLConnection along with a work queue to
mimic the asynchronocity.</p><p>Another reason to use the asynchronous transport
is to use HTTP methods that HttpURLConnection does not support. For example, the github.com
REST API specifies the use of PATCH for some cases, but HttpURLConnection rejects PATCH.</p><h3
id="AsynchronousClientHTTPTransport-UsingtheHTTPComponentsTransportfromJavaCode">Using
the HTTP Components Transport from Java Code</h3><p>To force global use of the
HTTP Components transport, you can set a bus-level property:</p><div class="cod
 e panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
+<div id="ConfluenceContent"><h1 id="AsynchronousClientHTTPTransport-AsynchronousClientHTTPTransport">Asynchronous
Client HTTP Transport</h1><p>By default, CXF uses a transport based on the in-JDK
HttpURLConnection object to perform HTTP requests. The HttpURLConnection object uses a blocking
model for all IO operations which requires a per-thread execution model. From a pure performance
standpoint, this model generally performs very well, but it does have problems scaling when
many requests need to be executed simultaneously.</p><p>Also, the JAX-WS specification
allows for generation of asynchronous methods on generated proxies as well as using asynchronous
methods on the Dispatch objects. These methods can take an AsyncHandler object and return
a polling Future object so applications do not have to wait for the response. With the HttpURLConnection
based transport, CXF was forced to consume a background thread for each outstanding request.</p><p>CXF
also has an HTTP client transport 
 that is based on the <a shape="rect" class="external-link" href="http://hc.apache.org/httpcomponents-asyncclient-dev/index.html">Apache
HTTP Components HttpAsyncClient</a> library. Its Maven artifactId is&#160;<span
style="line-height: 1.4285715;">cxf-rt-transports-http-hc.</span><span style="line-height:
1.4285715;">&#160;The HttpAsyncClient library uses a non-blocking IO model. This allows
many more requests to be outstanding without consuming extra background threads. It also allows
greater control over things like Keep-Alive handling which is very difficult or impossible
with the HttpURLConnection based transport. However, the non-blocking model does not perform
quite as well as the blocking model for pure synchronous request/response transactions.</span></p><p>By
default, if the cxf-rt-transports-http-hc module is found on the classpath, CXF will use the
HttpAsyncClient based implementation for any Async calls, but will continue to use the HttpURLConnection
based transport for 
 synchronous calls. This allows a good balance of performance for the common synchronous cases
with scalability for the asynchronous cases. However, using a contextual property of "use.async.http.conduit"
and set to true/false, you can control whether the async or blocking version is used. If "true",
the HttpAsyncClient will be used even for synchronous calls, if "false", asynchronous calls
will rely on the traditional method of using HTTPURLConnection along with a work queue to
mimic the asynchronocity.&#160; And if TLSClientParameters sets an SSLSocketFactory,&#160;
as SocketFactory class and SocketFactory#createSocket methods in particular are inherently
blocking and sockets instantiated in such a way cannot be used for asynchronous, so this lead
to use the HttpURLConnection based transport.</p><p>Another reason to use the
asynchronous transport is to use HTTP methods that HttpURLConnection does not support. For
example, the github.com REST API specifies the use of PATCH for some 
 cases, but HttpURLConnection rejects PATCH.</p><h3 id="AsynchronousClientHTTPTransport-UsingtheHTTPComponentsTransportfromJavaCode">Using
the HTTP Components Transport from Java Code</h3><p>To force global use of the
HTTP Components transport, you can set a bus-level property:</p><div class="code
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;"> Bus
bus = BusFactory.getDefaultBus();
  // insist on the async connector to use PATCH.
  bus.setProperty(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE);</pre>
@@ -127,7 +127,7 @@ Apache CXF -- Asynchronous Client HTTP T
 <pre class="brush: java; gutter: false; theme: Default" style="font-size:12px;">Credentials
creds = new NTCredentials("username", "pswd", null, "domain");
 bp.getRequestContext().put(Credentials.class.getName(), creds);
 </pre>
-</div></div></li></ul><h3 id="AsynchronousClientHTTPTransport-Configuration">Configuration</h3><p>The
Asynchronous HTTP Transport has several options that can set using Bus properties or via the
OSGi configuration services to control various aspects of the underlying Apache HTTP Components
HttpAsyncClient objects.</p><p>Settings related to the underlying TCP socket (see
<a shape="rect" class="external-link" href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html"
rel="nofollow">java.net.Socket</a> for a definition of these values):</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.TCP_NODELAY
(Default true)</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_KEEPALIVE</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_LINGER</p></td></tr><tr><td
colspan="
 1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_TIMEOUT</p></td></tr></tbody></table></div><p>Settings
related to Keep-Alive connection management:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.CONNECTION_TTL</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Maximum time a connection which is
released and not used <span>in the pool</span>. Default is 60000.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.MAX_CONNECTIONS</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><span>Maximum number of connections
opened in total. Default is 5000.</span></p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.MAX_PER_HOST_CONNECTIONS</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><span>Maximum number of connections
op
 ened per host. Default is 1000.</span></p></td></tr></tbody></table></div><p>Settings
related to Apache HttpAsyncClient threads and selectors:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.ioThreadCount</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Number of threads HttpAsyncClient
uses to process IO events. Default is "-1" which means one thread per CPU core.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.interestOpQueued</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>true/false for whether the interest
ops are queues or process directly.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.selectInterval</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Default 1000 ms. How often the selector
thread wakes up if there are no eve
 nts to process additional things like queue expirations.</p></td></tr></tbody></table></div><p>Setting
to control which conduit is used</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.usePolicy</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>ALWAYS, ASYNC_ONLY, NEVER.</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Similar in meaning to the "use.async.http.conduit"
context property described above. Whether to use the HttpAsyncClient: ALWAYS for both synchronous
and asynchronous calls, ASYNC_ONLY (default) for asynchronous calls only, NEVER will use HTTPURLConnection
for both types of calls.</p></td></tr></tbody></table></div></div>
+</div></div></li></ul><h3 id="AsynchronousClientHTTPTransport-Configuration">Configuration</h3><p>The
Asynchronous HTTP Transport has several options that can set using Bus properties or via the
OSGi configuration services to control various aspects of the underlying Apache HTTP Components
HttpAsyncClient objects.</p><p>Settings related to the underlying TCP socket (see
<a shape="rect" class="external-link" href="http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html"
rel="nofollow">java.net.Socket</a> for a definition of these values):</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.TCP_NODELAY
(Default true)</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_KEEPALIVE</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_LINGER</p></td></tr><tr><td
colspan="
 1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.SO_TIMEOUT</p></td></tr></tbody></table></div><p>Settings
related to Keep-Alive connection management:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.CONNECTION_TTL</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Maximum time a connection to live(from
creation to expiry)<span>&#160;</span>. Default is 60000.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.MAX_CONNECTIONS</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><span>Maximum number of connections
opened in total. Default is 5000.</span></p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.MAX_PER_HOST_CONNECTIONS</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p><span>Maximum number of connections
opened
  per host. Default is 1000.</span></p></td></tr></tbody></table></div><p>Settings
related to Apache HttpAsyncClient threads and selectors:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.ioThreadCount</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Number of threads HttpAsyncClient
uses to process IO events. Default is "-1" which means one thread per CPU core.</p></td></tr><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.interestOpQueued</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>true/false for whether the interest
ops are queues or process directly.</p></td></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.selectInterval</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Default 1000 ms. How often the selector
thread wakes up if there are no events 
 to process additional things like queue expirations.</p></td></tr></tbody></table></div><p>Setting
to control which conduit is used</p><div class="table-wrap"><table class="confluenceTable"><tbody><tr><td
colspan="1" rowspan="1" class="confluenceTd"><p>org.apache.cxf.transport.http.async.usePolicy</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>ALWAYS, ASYNC_ONLY, NEVER.</p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Similar in meaning to the "use.async.http.conduit"
context property described above. Whether to use the HttpAsyncClient: ALWAYS for both synchronous
and asynchronous calls, ASYNC_ONLY (default) for asynchronous calls only, NEVER will use HTTPURLConnection
for both types of calls.</p></td></tr></tbody></table></div></div>
            </div>
            <!-- Content -->
          </td>



Mime
View raw message