/// <summary> /// Get offsets for a single partitions of a given topic. /// </summary> /// <param name="router">The router which provides the route and metadata.</param> /// <param name="topicName">Name of the topic to get offset information from.</param> /// <param name="partitionId">The partition to get offsets for.</param> /// <param name="maxOffsets">How many to get, at most.</param> /// <param name="offsetTime">These are best described by <see cref="OffsetsRequest.Topic.timestamp"/></param> /// <param name="cancellationToken"></param> public static async Task <OffsetsResponse.Topic> GetOffsetsAsync(this IRouter router, string topicName, int partitionId, int maxOffsets, long offsetTime, CancellationToken cancellationToken) { var request = new OffsetsRequest(new OffsetsRequest.Topic(topicName, partitionId, offsetTime, maxOffsets)); var response = await router.SendAsync(request, topicName, partitionId, cancellationToken).ConfigureAwait(false); return(response.responses.SingleOrDefault(t => t.topic == topicName && t.partition_id == partitionId)); }
public void OffsetsRequest( [Values(0, 1)] short version, [Values("testTopic")] string topic, [Values(1, 10)] int topicsPerRequest, [Values(1, 5)] int totalPartitions, [Values(-2, -1, 123456, 10000000)] long time, [Values(1, 10)] int maxOffsets) { var topics = new List <OffsetsRequest.Topic>(); for (var t = 0; t < topicsPerRequest; t++) { var offset = new OffsetsRequest.Topic(topic + t, t % totalPartitions, time, version == 0 ? maxOffsets : 1); topics.Add(offset); } var request = new OffsetsRequest(topics); request.AssertCanEncodeDecodeRequest(version); }