Package com.rabbitmq.client.impl
Class AMQChannel
- java.lang.Object
-
- com.rabbitmq.client.impl.ShutdownNotifierComponent
-
- com.rabbitmq.client.impl.AMQChannel
-
- All Implemented Interfaces:
ShutdownNotifier
- Direct Known Subclasses:
ChannelN
public abstract class AMQChannel extends ShutdownNotifierComponent
Base class modelling an AMQ channel. Subclasses implementChannel.close()
andprocessAsync()
, and may choose to overrideprocessShutdownSignal()
andrpc()
.- See Also:
ChannelN
,Connection
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
AMQChannel.BlockingRpcContinuation<T>
static interface
AMQChannel.RpcContinuation
static class
AMQChannel.SimpleBlockingRpcContinuation
-
Field Summary
Fields Modifier and Type Field Description protected boolean
_blockContent
Whether transmission of content-bearing methods should be blockedprotected Object
_channelMutex
Protected; used instead of synchronizing on the channel itself, so that clients can themselves use the channel to synchronize on.protected int
_rpcTimeout
Timeout for RPC callsprotected static int
NO_RPC_TIMEOUT
-
Constructor Summary
Constructors Constructor Description AMQChannel(AMQConnection connection, int channelNumber)
Construct a channel on the given connection, with the given channel number.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description void
enqueueRpc(AMQChannel.RpcContinuation k)
void
ensureIsOpen()
AMQCommand
exnWrappingRpc(Method m)
Placeholder until we address bug 15786 (implementing a proper exception hierarchy).int
getChannelNumber()
Public API - Retrieves this channel's channel number.AMQConnection
getConnection()
void
handleCompleteInboundCommand(AMQCommand command)
Private API - handle a command which has been assembledvoid
handleFrame(Frame frame)
Private API - When the Connection receives a Frame for this channel, it passes it to this method.boolean
isOutstandingRpc()
protected void
markRpcFinished()
AMQChannel.RpcContinuation
nextOutstandingRpc()
void
notifyOutstandingRpc(ShutdownSignalException signal)
abstract boolean
processAsync(Command command)
Protected API - called by nextCommand to check possibly handle an incoming Command before it is returned to the caller of nextCommand.void
processShutdownSignal(ShutdownSignalException signal, boolean ignoreClosed, boolean notifyRpc)
Protected API - respond, in the driver thread, to aShutdownSignalException
.void
quiescingRpc(Method m, AMQChannel.RpcContinuation k)
void
quiescingTransmit(AMQCommand c)
void
quiescingTransmit(Method m)
AMQCommand
rpc(Method m)
Protected API - sends aMethod
to the broker and waits for the next in-bound Command from the broker: only for use from non-connection-MainLoop threads!AMQCommand
rpc(Method m, int timeout)
void
rpc(Method m, AMQChannel.RpcContinuation k)
String
toString()
void
transmit(AMQCommand c)
void
transmit(Method m)
static IOException
wrap(ShutdownSignalException ex)
Placeholder until we address bug 15786 (implementing a proper exception hierarchy).static IOException
wrap(ShutdownSignalException ex, String message)
protected ChannelContinuationTimeoutException
wrapTimeoutException(Method m, TimeoutException e)
Cleans RPC channel state after a timeout and wraps the TimeoutException in a ChannelContinuationTimeoutException-
Methods inherited from class com.rabbitmq.client.impl.ShutdownNotifierComponent
addShutdownListener, getCloseReason, isOpen, notifyListeners, removeShutdownListener, setShutdownCauseIfOpen
-
-
-
-
Field Detail
-
NO_RPC_TIMEOUT
protected static final int NO_RPC_TIMEOUT
- See Also:
- Constant Field Values
-
_channelMutex
protected final Object _channelMutex
Protected; used instead of synchronizing on the channel itself, so that clients can themselves use the channel to synchronize on.
-
_blockContent
protected volatile boolean _blockContent
Whether transmission of content-bearing methods should be blocked
-
_rpcTimeout
protected final int _rpcTimeout
Timeout for RPC calls
-
-
Constructor Detail
-
AMQChannel
public AMQChannel(AMQConnection connection, int channelNumber)
Construct a channel on the given connection, with the given channel number.- Parameters:
connection
- the underlying connection for this channelchannelNumber
- the allocated reference number for this channel
-
-
Method Detail
-
getChannelNumber
public int getChannelNumber()
Public API - Retrieves this channel's channel number.- Returns:
- the channel number
-
handleFrame
public void handleFrame(Frame frame) throws IOException
Private API - When the Connection receives a Frame for this channel, it passes it to this method.- Parameters:
frame
- the incoming frame- Throws:
IOException
- if an error is encountered
-
wrap
public static IOException wrap(ShutdownSignalException ex)
Placeholder until we address bug 15786 (implementing a proper exception hierarchy). In the meantime, this at least won't throw away any information from the wrapped exception.- Parameters:
ex
- the exception to wrap- Returns:
- the wrapped exception
-
wrap
public static IOException wrap(ShutdownSignalException ex, String message)
-
exnWrappingRpc
public AMQCommand exnWrappingRpc(Method m) throws IOException
Placeholder until we address bug 15786 (implementing a proper exception hierarchy).- Throws:
IOException
-
handleCompleteInboundCommand
public void handleCompleteInboundCommand(AMQCommand command) throws IOException
Private API - handle a command which has been assembled- Parameters:
command
- the incoming command- Throws:
IOException
- if there's any problemIOException
-
enqueueRpc
public void enqueueRpc(AMQChannel.RpcContinuation k)
-
isOutstandingRpc
public boolean isOutstandingRpc()
-
nextOutstandingRpc
public AMQChannel.RpcContinuation nextOutstandingRpc()
-
markRpcFinished
protected void markRpcFinished()
-
ensureIsOpen
public void ensureIsOpen() throws AlreadyClosedException
- Throws:
AlreadyClosedException
-
rpc
public AMQCommand rpc(Method m) throws IOException, ShutdownSignalException
Protected API - sends aMethod
to the broker and waits for the next in-bound Command from the broker: only for use from non-connection-MainLoop threads!- Throws:
IOException
ShutdownSignalException
-
rpc
public AMQCommand rpc(Method m, int timeout) throws IOException, ShutdownSignalException, TimeoutException
-
wrapTimeoutException
protected ChannelContinuationTimeoutException wrapTimeoutException(Method m, TimeoutException e)
Cleans RPC channel state after a timeout and wraps the TimeoutException in a ChannelContinuationTimeoutException
-
rpc
public void rpc(Method m, AMQChannel.RpcContinuation k) throws IOException
- Throws:
IOException
-
quiescingRpc
public void quiescingRpc(Method m, AMQChannel.RpcContinuation k) throws IOException
- Throws:
IOException
-
processAsync
public abstract boolean processAsync(Command command) throws IOException
Protected API - called by nextCommand to check possibly handle an incoming Command before it is returned to the caller of nextCommand. If this method returns true, the command is considered handled and is not passed back to nextCommand's caller; if it returns false, nextCommand returns the command as usual. This is used in subclasses to implement handling of Basic.Return and Basic.Deliver messages, as well as Channel.Close and Connection.Close.- Parameters:
command
- the command to handle asynchronously- Returns:
- true if we handled the command; otherwise the caller should consider it "unhandled"
- Throws:
IOException
-
processShutdownSignal
public void processShutdownSignal(ShutdownSignalException signal, boolean ignoreClosed, boolean notifyRpc)
Protected API - respond, in the driver thread, to aShutdownSignalException
.- Parameters:
signal
- the signal to handleignoreClosed
- the flag indicating whether to ignore the AlreadyClosedException thrown when the channel is already closednotifyRpc
- the flag indicating whether any remaining rpc continuation should be notified with the given signal
-
notifyOutstandingRpc
public void notifyOutstandingRpc(ShutdownSignalException signal)
-
transmit
public void transmit(Method m) throws IOException
- Throws:
IOException
-
transmit
public void transmit(AMQCommand c) throws IOException
- Throws:
IOException
-
quiescingTransmit
public void quiescingTransmit(Method m) throws IOException
- Throws:
IOException
-
quiescingTransmit
public void quiescingTransmit(AMQCommand c) throws IOException
- Throws:
IOException
-
getConnection
public AMQConnection getConnection()
-
-