subscribeToShard method
This operation establishes an HTTP/2 connection between the consumer you
specify in the ConsumerARN parameter and the shard you
specify in the ShardId parameter. After the connection is
successfully established, Kinesis Data Streams pushes records from the
shard to the consumer over this connection. Before you call this
operation, call RegisterStreamConsumer to register the consumer
with Kinesis Data Streams.
When the SubscribeToShard call succeeds, your consumer starts
receiving events of type SubscribeToShardEvent over the HTTP/2
connection for up to 5 minutes, after which time you need to call
SubscribeToShard again to renew the subscription if you want
to continue to receive records.
You can make one call to SubscribeToShard per second per
registered consumer per shard. For example, if you have a 4000 shard
stream and two registered stream consumers, you can make one
SubscribeToShard request per second for each combination of
shard and registered consumer, allowing you to subscribe both consumers to
all 4000 shards in one second.
If you call SubscribeToShard again with the same
ConsumerARN and ShardId within 5 seconds of a
successful call, you'll get a ResourceInUseException. If you
call SubscribeToShard 5 seconds or more after a successful
call, the second call takes over the subscription and the previous
connection expires or fails with a ResourceInUseException.
For an example of how to use this operation, see Enhanced Fan-Out Using the Kinesis Data Streams API.
May throw AccessDeniedException.
May throw InvalidArgumentException.
May throw LimitExceededException.
May throw ResourceInUseException.
May throw ResourceNotFoundException.
Parameter consumerARN :
For this parameter, use the value you obtained when you called
RegisterStreamConsumer.
Parameter shardId :
The ID of the shard you want to subscribe to. To see a list of all the
shards for a given stream, use ListShards.
Parameter startingPosition :
The starting position in the data stream from which to start streaming.
Parameter streamId :
Not Implemented. Reserved for future use.
Implementation
Future<SubscribeToShardOutput> subscribeToShard({
required String consumerARN,
required String shardId,
required StartingPosition startingPosition,
String? streamId,
}) async {
final headers = <String, String>{
'Content-Type': 'application/x-amz-json-1.1',
'X-Amz-Target': 'Kinesis_20131202.SubscribeToShard'
};
final jsonResponse = await _protocol.send(
method: 'POST',
requestUri: '/',
exceptionFnMap: _exceptionFns,
// TODO queryParams
headers: headers,
payload: {
'ConsumerARN': consumerARN,
'ShardId': shardId,
'StartingPosition': startingPosition,
if (streamId != null) 'StreamId': streamId,
},
);
return SubscribeToShardOutput.fromJson(jsonResponse.body);
}