feat: add jetstream consumer api lifecycle

This commit is contained in:
Joseph Doherty
2026-02-23 06:06:02 -05:00
parent 6825839191
commit 40b940b1fd
6 changed files with 175 additions and 5 deletions

View File

@@ -9,16 +9,19 @@ namespace NATS.Server.Tests;
internal sealed class JetStreamApiFixture : IAsyncDisposable
{
private static readonly StreamManager SharedStreamManager = new();
private static readonly JetStreamApiRouter SharedRouter = new(SharedStreamManager);
private static readonly ConsumerManager SharedConsumerManager = new();
private static readonly JetStreamApiRouter SharedRouter = new(SharedStreamManager, SharedConsumerManager);
private readonly StreamManager _streamManager;
private readonly ConsumerManager _consumerManager;
private readonly JetStreamApiRouter _router;
private readonly JetStreamPublisher _publisher;
private JetStreamApiFixture()
{
_streamManager = new StreamManager();
_router = new JetStreamApiRouter(_streamManager);
_consumerManager = new ConsumerManager();
_router = new JetStreamApiRouter(_streamManager, _consumerManager);
_publisher = new JetStreamPublisher(_streamManager);
}
@@ -56,5 +59,17 @@ internal sealed class JetStreamApiFixture : IAsyncDisposable
return _streamManager.GetStateAsync(streamName, default).AsTask();
}
public Task<JetStreamApiResponse> CreateConsumerAsync(string stream, string durableName, string filterSubject)
{
var payload = $@"{{""durable_name"":""{durableName}"",""filter_subject"":""{filterSubject}""}}";
return RequestLocalAsync($"$JS.API.CONSUMER.CREATE.{stream}.{durableName}", payload);
}
public async Task<JetStreamConsumerInfo> GetConsumerInfoAsync(string stream, string durableName)
{
var response = await RequestLocalAsync($"$JS.API.CONSUMER.INFO.{stream}.{durableName}", "{}");
return response.ConsumerInfo ?? throw new InvalidOperationException("Consumer not found.");
}
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
}