feat: implement jetstream pull consumer fetch
This commit is contained in:
35
src/NATS.Server/JetStream/Consumers/PullConsumerEngine.cs
Normal file
35
src/NATS.Server/JetStream/Consumers/PullConsumerEngine.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using NATS.Server.JetStream.Storage;
|
||||
|
||||
namespace NATS.Server.JetStream.Consumers;
|
||||
|
||||
public sealed class PullConsumerEngine
|
||||
{
|
||||
public async ValueTask<PullFetchBatch> FetchAsync(StreamHandle stream, ConsumerHandle consumer, int batch, CancellationToken ct)
|
||||
{
|
||||
var messages = new List<StoredMessage>(batch);
|
||||
var sequence = consumer.NextSequence;
|
||||
|
||||
for (var i = 0; i < batch; i++)
|
||||
{
|
||||
var message = await stream.Store.LoadAsync(sequence, ct);
|
||||
if (message == null)
|
||||
break;
|
||||
|
||||
messages.Add(message);
|
||||
sequence++;
|
||||
}
|
||||
|
||||
consumer.NextSequence = sequence;
|
||||
return new PullFetchBatch(messages);
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class PullFetchBatch
|
||||
{
|
||||
public IReadOnlyList<StoredMessage> Messages { get; }
|
||||
|
||||
public PullFetchBatch(IReadOnlyList<StoredMessage> messages)
|
||||
{
|
||||
Messages = messages;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user