HttpRequest の組み立て
HttpClient#get
などのメソッドからHttpClient#request
メソッドを呼び出しHttpClient#request
にてMono<HttpClientResponse>
を返すが、実体はMonoHttpClientResponse
- 2.の際に
HttpClient#handler
というメソッドが呼び出され、Function<HttpClientRequest,Publisher<Void>>
がMonoHttpClientResponse
に渡される - 3.はユーザーのハンドリングにて
Mono<SomeRequestBaseModel>
が生成されることを予期している MonoHttpClientResponse#subscribe
が呼び出されると、Mono#defer
にてMono<NettyContext>
が生成されて、HttpClientResponse
にキャストされたものがsubscribe
される- 5.の
defer
の中ではHttpClient#newHandler
が呼び出される - 6.の
HttpClient#newHandler
はMono<NettyContext>
を返すメソッド - 6.の
HttpClient#newHandler
に渡すHttpClientHandler
はBiFunction<NettyInbound,NettyOutbound,Publisher<Void>>
を実装するクラスで、ここのapply
メソッドにてNettyInbound
(=HttpClientOperations
)をもとに リクエストを組み立てる HttpClient#newHandler
は実際にはTcpBridgeClient#newHandler
に委譲していて、更にTcpClient#newHandler
に委譲しているTcpClient#newHandler
ではBootstrap
の取得が行われるTcpClient#newHandler
の最中に呼び出されるTcpClient#doHandler
メソッドの戻り値ContextHandler<SocketChannel>
はChannelInitializer<SocketChannel>
を継承したクラスContextHandler<SocketChannel>
は抽象クラスで実装クラスはPooledClientContextHandler
(ChannelPool
が利用可能な場合) またはClientContextHandler
ContextHandler
のinitChannel
はdoPipeline(Channel)
を読んで各サブクラスで ハンドラーを登録したあとにChannelOperationsHandler
を登録する