Package org.apache.avro.ipc.netty
Class NettyTransceiver
java.lang.Object
org.apache.avro.ipc.Transceiver
org.apache.avro.ipc.netty.NettyTransceiver
- All Implemented Interfaces:
Closeable
,AutoCloseable
A Netty-based
Transceiver
implementation.-
Nested Class Summary
Modifier and TypeClassDescriptionprotected class
Avro client handler for the Netty transportprotected static class
Creates threads with unique names based on a specified name prefix.protected static class
A ChannelFutureListener for channel write operations that notifies aCallback
if an error occurs while writing to the channel. -
Field Summary
-
Constructor Summary
ConstructorDescriptionCreates a NettyTransceiver, and attempts to connect to the given address.NettyTransceiver
(InetSocketAddress addr, Integer connectTimeoutMillis) Creates a NettyTransceiver, and attempts to connect to the given address.NettyTransceiver
(InetSocketAddress addr, Integer connectTimeoutMillis, Consumer<io.netty.channel.socket.SocketChannel> initializer) Creates a NettyTransceiver, and attempts to connect to the given address.NettyTransceiver
(InetSocketAddress addr, Integer connectTimeoutMillis, Consumer<io.netty.channel.socket.SocketChannel> initializer, Consumer<io.netty.bootstrap.Bootstrap> bootStrapInitialzier) Creates a NettyTransceiver, and attempts to connect to the given address.NettyTransceiver
(InetSocketAddress addr, Consumer<io.netty.channel.socket.SocketChannel> initializer) Creates a NettyTransceiver, and attempts to connect to the given address. -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Closes this transceiver and disconnects from the remote peer.void
close
(boolean awaitCompletion) Closes this transceiver and disconnects from the remote peer.protected io.netty.channel.ChannelInboundHandler
Creates a Netty ChannelUpstreamHandler for handling events on the Netty client channel.Returns the protocol passed toTransceiver.setRemote(Protocol)
.boolean
True if a handshake has been completed for this connection.void
Netty channels are thread-safe, so there is no need to acquire locks.Called by the default definition ofTransceiver.transceive(List)
.void
Called with the remote protocol when a handshake has been completed.transceive
(List<ByteBuffer> request) Override as non-synchronized method because the method is thread safe.void
transceive
(List<ByteBuffer> request, Callback<List<ByteBuffer>> callback) Called byRequestor.request(String,Object,Callback)
for two-way messages using callbacks.void
Netty channels are thread-safe, so there is no need to acquire locks.void
writeBuffers
(List<ByteBuffer> buffers) Called byRequestor.request(String,Object)
for one-way messages.
-
Field Details
-
DEFAULT_CONNECTION_TIMEOUT_MILLIS
public static final int DEFAULT_CONNECTION_TIMEOUT_MILLISIf not specified, the default connection timeout will be used (60 sec).- See Also:
-
NETTY_CONNECT_TIMEOUT_OPTION
- See Also:
-
NETTY_TCP_NODELAY_OPTION
- See Also:
-
NETTY_KEEPALIVE_OPTION
- See Also:
-
DEFAULT_TCP_NODELAY_VALUE
public static final boolean DEFAULT_TCP_NODELAY_VALUE- See Also:
-
-
Constructor Details
-
NettyTransceiver
Creates a NettyTransceiver, and attempts to connect to the given address.DEFAULT_CONNECTION_TIMEOUT_MILLIS
is used for the connection timeout.- Parameters:
addr
- the address to connect to.- Throws:
IOException
- if an error occurs connecting to the given address.
-
NettyTransceiver
Creates a NettyTransceiver, and attempts to connect to the given address.- Parameters:
addr
- the address to connect to.connectTimeoutMillis
- maximum amount of time to wait for connection establishment in milliseconds, or null to useDEFAULT_CONNECTION_TIMEOUT_MILLIS
.- Throws:
IOException
- if an error occurs connecting to the given address.
-
NettyTransceiver
public NettyTransceiver(InetSocketAddress addr, Consumer<io.netty.channel.socket.SocketChannel> initializer) throws IOException Creates a NettyTransceiver, and attempts to connect to the given address.- Parameters:
addr
- the address to connect to.initializer
- Consumer function to apply initial setup to the SocketChannel. Useablet to set things like SSL requirements, compression, etc...- Throws:
IOException
- if an error occurs connecting to the given address.
-
NettyTransceiver
public NettyTransceiver(InetSocketAddress addr, Integer connectTimeoutMillis, Consumer<io.netty.channel.socket.SocketChannel> initializer) throws IOException Creates a NettyTransceiver, and attempts to connect to the given address.- Parameters:
addr
- the address to connect to.connectTimeoutMillis
- maximum amount of time to wait for connection establishment in milliseconds, or null to useDEFAULT_CONNECTION_TIMEOUT_MILLIS
.initializer
- Consumer function to apply initial setup to the SocketChannel. Usable to set things like SSL requirements, compression, etc...- Throws:
IOException
- if an error occurs connecting to the given address.
-
NettyTransceiver
public NettyTransceiver(InetSocketAddress addr, Integer connectTimeoutMillis, Consumer<io.netty.channel.socket.SocketChannel> initializer, Consumer<io.netty.bootstrap.Bootstrap> bootStrapInitialzier) throws IOException Creates a NettyTransceiver, and attempts to connect to the given address.- Parameters:
addr
- the address to connect to.connectTimeoutMillis
- maximum amount of time to wait for connection establishment in milliseconds, or null to useDEFAULT_CONNECTION_TIMEOUT_MILLIS
.initializer
- Consumer function to apply initial setup to the SocketChannel. Usable to set things like SSL requirements, compression, etc...bootStrapInitialzier
- Consumer function to apply initial setup to the Bootstrap. Usable to set things like tcp connection properties, nagle algorithm, etc...- Throws:
IOException
- if an error occurs connecting to the given address.
-
-
Method Details
-
createNettyClientAvroHandler
protected io.netty.channel.ChannelInboundHandler createNettyClientAvroHandler()Creates a Netty ChannelUpstreamHandler for handling events on the Netty client channel.- Returns:
- the ChannelUpstreamHandler to use.
-
lockChannel
public void lockChannel()Netty channels are thread-safe, so there is no need to acquire locks. This method is a no-op.- Overrides:
lockChannel
in classTransceiver
-
unlockChannel
public void unlockChannel()Netty channels are thread-safe, so there is no need to acquire locks. This method is a no-op.- Overrides:
unlockChannel
in classTransceiver
-
close
public void close()Closes this transceiver and disconnects from the remote peer. Cancels all pending RPCs, sends an IOException to all pending callbacks, and blocks until the close has completed.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classTransceiver
-
close
public void close(boolean awaitCompletion) Closes this transceiver and disconnects from the remote peer. Cancels all pending RPCs and sends an IOException to all pending callbacks.- Parameters:
awaitCompletion
- if true, will block until the close has completed.
-
getRemoteName
- Specified by:
getRemoteName
in classTransceiver
- Throws:
IOException
-
transceive
Override as non-synchronized method because the method is thread safe.- Overrides:
transceive
in classTransceiver
- Throws:
IOException
-
transceive
public void transceive(List<ByteBuffer> request, Callback<List<ByteBuffer>> callback) throws IOException Description copied from class:Transceiver
Called byRequestor.request(String,Object,Callback)
for two-way messages using callbacks.- Overrides:
transceive
in classTransceiver
- Throws:
IOException
-
writeBuffers
Description copied from class:Transceiver
Called byRequestor.request(String,Object)
for one-way messages.- Specified by:
writeBuffers
in classTransceiver
- Throws:
IOException
-
readBuffers
Description copied from class:Transceiver
Called by the default definition ofTransceiver.transceive(List)
.- Specified by:
readBuffers
in classTransceiver
- Throws:
IOException
-
getRemote
Description copied from class:Transceiver
Returns the protocol passed toTransceiver.setRemote(Protocol)
. Throws IllegalStateException by default.- Overrides:
getRemote
in classTransceiver
-
isConnected
public boolean isConnected()Description copied from class:Transceiver
True if a handshake has been completed for this connection. Used to determine whether a handshake need be completed prior to a one-way message. Requests and responses are always prefixed by handshakes, but one-way messages. If the first request sent over a connection is one-way, then a handshake-only response is returned. Subsequent one-way messages over the connection will have no response data sent. Returns false by default.- Overrides:
isConnected
in classTransceiver
-
setRemote
Description copied from class:Transceiver
Called with the remote protocol when a handshake has been completed. After this has been called and while a connection is maintained,Transceiver.isConnected()
should return true and #getRemote() should return this protocol. Does nothing by default.- Overrides:
setRemote
in classTransceiver
-