updated to .NET9 and cache ConnectionMultiplexer instead of IDatabase as per documentation

This commit is contained in:
Michael Samorokov 2025-01-20 18:18:59 -07:00
parent 6249028be9
commit 85876688a9
6 changed files with 22 additions and 23 deletions

View File

@ -2,15 +2,15 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Orleans.Client" Version="8.1.0" /> <PackageReference Include="Microsoft.Orleans.Client" Version="9.0.1" />
<PackageReference Include="Microsoft.Orleans.Streaming" Version="8.1.0" /> <PackageReference Include="Microsoft.Orleans.Streaming" Version="9.0.1" />
<PackageReference Include="StackExchange.Redis" Version="2.7.33" /> <PackageReference Include="StackExchange.Redis" Version="2.8.24" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@ -9,10 +9,9 @@ using StackExchange.Redis;
using IHost host = new HostBuilder() using IHost host = new HostBuilder()
.UseOrleansClient(clientBuilder => .UseOrleansClient(clientBuilder =>
{ {
clientBuilder.Services.AddSingleton<IDatabase>(sp => clientBuilder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{ {
IDatabase db = ConnectionMultiplexer.Connect("localhost").GetDatabase(); return ConnectionMultiplexer.Connect("localhost");
return db;
}); });
clientBuilder.UseLocalhostClustering(); clientBuilder.UseLocalhostClustering();

View File

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Orleans.Streaming" Version="8.1.0" /> <PackageReference Include="Microsoft.Orleans.Streaming" Version="9.0.1" />
<PackageReference Include="Microsoft.Orleans.Sdk" Version="8.1.0" /> <PackageReference Include="Microsoft.Orleans.Sdk" Version="9.0.1" />
<PackageReference Include="StackExchange.Redis" Version="2.7.33" /> <PackageReference Include="StackExchange.Redis" Version="2.8.24" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -9,14 +9,14 @@ namespace Provider
{ {
public class RedisStreamFactory : IQueueAdapterFactory public class RedisStreamFactory : IQueueAdapterFactory
{ {
private readonly IDatabase _database; private readonly IConnectionMultiplexer _connectionMultiplexer;
private readonly ILoggerFactory _loggerFactory; private readonly ILoggerFactory _loggerFactory;
private readonly string _providerName; private readonly string _providerName;
private readonly IStreamFailureHandler _streamFailureHandler; private readonly IStreamFailureHandler _streamFailureHandler;
private readonly SimpleQueueCacheOptions _simpleQueueCacheOptions; private readonly SimpleQueueCacheOptions _simpleQueueCacheOptions;
private readonly HashRingBasedStreamQueueMapper _hashRingBasedStreamQueueMapper; private readonly HashRingBasedStreamQueueMapper _hashRingBasedStreamQueueMapper;
public RedisStreamFactory(IDatabase database, public RedisStreamFactory(IConnectionMultiplexer connectionMultiplexer,
ILoggerFactory loggerFactory, ILoggerFactory loggerFactory,
string providerName, string providerName,
IStreamFailureHandler streamFailureHandler, IStreamFailureHandler streamFailureHandler,
@ -24,7 +24,7 @@ namespace Provider
HashRingStreamQueueMapperOptions hashRingStreamQueueMapperOptions HashRingStreamQueueMapperOptions hashRingStreamQueueMapperOptions
) )
{ {
_database = database; _connectionMultiplexer = connectionMultiplexer;
_loggerFactory = loggerFactory; _loggerFactory = loggerFactory;
_providerName = providerName; _providerName = providerName;
_streamFailureHandler = streamFailureHandler; _streamFailureHandler = streamFailureHandler;
@ -34,18 +34,18 @@ namespace Provider
public static IQueueAdapterFactory Create(IServiceProvider provider, string providerName) public static IQueueAdapterFactory Create(IServiceProvider provider, string providerName)
{ {
var database = provider.GetRequiredService<IDatabase>(); var connMuliplexer = provider.GetRequiredService<IConnectionMultiplexer>();
var loggerFactory = provider.GetRequiredService<ILoggerFactory>(); var loggerFactory = provider.GetRequiredService<ILoggerFactory>();
var simpleQueueCacheOptions = provider.GetOptionsByName<SimpleQueueCacheOptions>(providerName); var simpleQueueCacheOptions = provider.GetOptionsByName<SimpleQueueCacheOptions>(providerName);
var hashRingStreamQueueMapperOptions = provider.GetOptionsByName<HashRingStreamQueueMapperOptions>(providerName); var hashRingStreamQueueMapperOptions = provider.GetOptionsByName<HashRingStreamQueueMapperOptions>(providerName);
var streamFailureHandler = new RedisStreamFailureHandler(loggerFactory.CreateLogger<RedisStreamFailureHandler>()); var streamFailureHandler = new RedisStreamFailureHandler(loggerFactory.CreateLogger<RedisStreamFailureHandler>());
return new RedisStreamFactory(database, loggerFactory, providerName, streamFailureHandler, simpleQueueCacheOptions, hashRingStreamQueueMapperOptions); return new RedisStreamFactory(connMuliplexer, loggerFactory, providerName, streamFailureHandler, simpleQueueCacheOptions, hashRingStreamQueueMapperOptions);
} }
public Task<IQueueAdapter> CreateAdapter() public Task<IQueueAdapter> CreateAdapter()
{ {
return Task.FromResult<IQueueAdapter>(new RedisStreamAdapter(_database, _providerName, _hashRingBasedStreamQueueMapper, _loggerFactory)); return Task.FromResult<IQueueAdapter>(new RedisStreamAdapter(_connectionMultiplexer.GetDatabase(), _providerName, _hashRingBasedStreamQueueMapper, _loggerFactory));
} }
public Task<IStreamFailureHandler> GetDeliveryFailureHandler(QueueId queueId) public Task<IStreamFailureHandler> GetDeliveryFailureHandler(QueueId queueId)

View File

@ -10,9 +10,9 @@ var builder = new HostBuilder()
.UseOrleans(silo => .UseOrleans(silo =>
{ {
silo.UseLocalhostClustering(); silo.UseLocalhostClustering();
silo.Services.AddSingleton<IDatabase>(sp => silo.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{ {
return ConnectionMultiplexer.Connect("localhost").GetDatabase(); return ConnectionMultiplexer.Connect("localhost");
}); });
silo.ConfigureLogging(logging => logging.AddConsole()); silo.ConfigureLogging(logging => logging.AddConsole());
silo.AddMemoryGrainStorage("PubSubStore"); silo.AddMemoryGrainStorage("PubSubStore");

View File

@ -2,15 +2,15 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Orleans.Server" Version="8.1.0" /> <PackageReference Include="Microsoft.Orleans.Server" Version="9.0.1" />
<PackageReference Include="Microsoft.Orleans.Streaming" Version="8.1.0" /> <PackageReference Include="Microsoft.Orleans.Streaming" Version="9.0.1" />
<PackageReference Include="StackExchange.Redis" Version="2.7.33" /> <PackageReference Include="StackExchange.Redis" Version="2.8.24" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>