@UnstableApi public final class RedisBulkStringAggregator extends MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
ChannelHandler
that aggregates an BulkStringHeaderRedisMessage
and its following BulkStringRedisContent
s into a single FullBulkStringRedisMessage
with no following BulkStringRedisContent
s. It is useful when you don't want to take
care of RedisMessage
s whose transfer encoding is 'chunked'. Insert this
handler after RedisDecoder
in the ChannelPipeline
:
Be aware that you need to have theChannelPipeline
p = ...; ... p.addLast("encoder", newRedisEncoder
()); p.addLast("decoder", newRedisDecoder
()); p.addLast("aggregator", newRedisBulkStringAggregator
()); ... p.addLast("handler", new HttpRequestHandler());
RedisEncoder
before the RedisBulkStringAggregator
in the ChannelPipeline
.ChannelHandler.Sharable
构造器和说明 |
---|
RedisBulkStringAggregator()
Creates a new instance.
|
限定符和类型 | 方法和说明 |
---|---|
protected FullBulkStringRedisMessage |
beginAggregation(BulkStringHeaderRedisMessage start,
ByteBuf content)
Creates a new aggregated message from the specified start message and the specified content.
|
protected boolean |
closeAfterContinueResponse(java.lang.Object msg)
Determine if the channel should be closed after the result of
MessageAggregator.newContinueResponse(Object, int, ChannelPipeline) is written. |
protected boolean |
ignoreContentAfterContinueResponse(java.lang.Object msg)
Determine if all objects for the current request/response should be ignored or not.
|
protected boolean |
isAggregated(RedisMessage msg)
Returns
true if and only if the specified message is already aggregated. |
protected boolean |
isContentLengthInvalid(BulkStringHeaderRedisMessage start,
int maxContentLength)
Determine if the message
start 's content length is known, and if it greater than
maxContentLength . |
protected boolean |
isContentMessage(RedisMessage msg)
Returns
true if and only if the specified message is a content message. |
protected boolean |
isLastContentMessage(BulkStringRedisContent msg)
Returns
true if and only if the specified message is the last content message. |
protected boolean |
isStartMessage(RedisMessage msg)
Returns
true if and only if the specified message is a start message. |
protected java.lang.Object |
newContinueResponse(BulkStringHeaderRedisMessage start,
int maxContentLength,
ChannelPipeline pipeline)
Returns the 'continue response' for the specified start message if necessary.
|
acceptInboundMessage, aggregate, channelInactive, channelReadComplete, ctx, decode, finishAggregation, handleOversizedMessage, handlerAdded, handlerRemoved, isHandlingOversizedMessage, maxContentLength, maxCumulationBufferComponents, setMaxCumulationBufferComponents
channelRead
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, isSharable
protected boolean isStartMessage(RedisMessage msg) throws java.lang.Exception
MessageAggregator
true
if and only if the specified message is a start message. Typically, this method is
implemented as a single return
statement with instanceof
:
return msg instanceof MyStartMessage;
isStartMessage
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
java.lang.Exception
protected boolean isContentMessage(RedisMessage msg) throws java.lang.Exception
MessageAggregator
true
if and only if the specified message is a content message. Typically, this method is
implemented as a single return
statement with instanceof
:
return msg instanceof MyContentMessage;
isContentMessage
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
java.lang.Exception
protected boolean isLastContentMessage(BulkStringRedisContent msg) throws java.lang.Exception
MessageAggregator
true
if and only if the specified message is the last content message. Typically, this method is
implemented as a single return
statement with instanceof
:
return msg instanceof MyLastContentMessage;or with
instanceof
and boolean field check:
return msg instanceof MyContentMessage && msg.isLastFragment();
isLastContentMessage
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
java.lang.Exception
protected boolean isAggregated(RedisMessage msg) throws java.lang.Exception
MessageAggregator
true
if and only if the specified message is already aggregated. If this method returns
true
, this handler will simply forward the message to the next handler as-is.isAggregated
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
java.lang.Exception
protected boolean isContentLengthInvalid(BulkStringHeaderRedisMessage start, int maxContentLength) throws java.lang.Exception
MessageAggregator
start
's content length is known, and if it greater than
maxContentLength
.isContentLengthInvalid
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
start
- The message which may indicate the content length.maxContentLength
- The maximum allowed content length.true
if the message start
's content length is known, and if it greater than
maxContentLength
. false
otherwise.java.lang.Exception
protected java.lang.Object newContinueResponse(BulkStringHeaderRedisMessage start, int maxContentLength, ChannelPipeline pipeline) throws java.lang.Exception
MessageAggregator
newContinueResponse
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
null
if there's no message to sendjava.lang.Exception
protected boolean closeAfterContinueResponse(java.lang.Object msg) throws java.lang.Exception
MessageAggregator
MessageAggregator.newContinueResponse(Object, int, ChannelPipeline)
is written.closeAfterContinueResponse
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
msg
- The return value from MessageAggregator.newContinueResponse(Object, int, ChannelPipeline)
.true
if the channel should be closed after the result of
MessageAggregator.newContinueResponse(Object, int, ChannelPipeline)
is written. false
otherwise.java.lang.Exception
protected boolean ignoreContentAfterContinueResponse(java.lang.Object msg) throws java.lang.Exception
MessageAggregator
MessageAggregator.isContentMessage(Object)
returns true
.ignoreContentAfterContinueResponse
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
msg
- The return value from MessageAggregator.newContinueResponse(Object, int, ChannelPipeline)
.true
if all objects for the current request/response should be ignored or not.
false
otherwise.java.lang.Exception
protected FullBulkStringRedisMessage beginAggregation(BulkStringHeaderRedisMessage start, ByteBuf content) throws java.lang.Exception
MessageAggregator
ByteBufHolder
, its content is appended to the specified content
.
This aggregator will continue to append the received content to the specified content
.beginAggregation
在类中 MessageAggregator<RedisMessage,BulkStringHeaderRedisMessage,BulkStringRedisContent,FullBulkStringRedisMessage>
java.lang.Exception