This example is inspired by this sample https://github.com/Azure-Samples/build-your-first-orleans-app-aspnetcore.
Besides the original endpoints it adds two more endpoints, /counter
for increasing the counter and /getcounter
for retrieving the current counter.
// In Kubernetes, we use environment variables and the pod manifest
siloBuilder.UseKubernetesHosting();
// Use Redis for clustering & persistence
var redisConnectionString = $"{Environment.GetEnvironmentVariable("REDIS")}:6379";
siloBuilder.UseRedisClustering(options => options.ConnectionString = redisConnectionString);
siloBuilder.AddRedisGrainStorage("urls", options => options.ConnectionString = redisConnectionString);
Configuration used to deploy to Azure container app (choose to use azure storage account as storage)
// container app configuration
var connectionString = "azure storage connection string";
siloBuilder
.UseAzureStorageClustering(o => o.ConfigureTableServiceClient(connectionString))
.AddAzureTableGrainStorage("urls", o => o.ConfigureTableServiceClient(connectionString));
scripts to be run:
- configuration scripts: https://learn.microsoft.com/en-us/dotnet/orleans/host/configuration-guide/adonet-configuration
- migration scripts: https://github.com/dotnet/orleans/blob/main/src/AdoNet/Orleans.Clustering.AdoNet/Migrations/SQLServer-Clustering-3.7.0.sql reference: dotnet/orleans#8216
// Use ADO.NET
var invariant = "System.Data.SqlClient";
var connectionString = "sql server connection string";
// Use ADO.NET for clustering
siloBuilder.UseAdoNetClustering(options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});
// Use ADO.NET for reminder service
siloBuilder.UseAdoNetReminderService(options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});
// Use ADO.NET for persistence
siloBuilder.AddAdoNetGrainStorage("urls", options =>
{
options.Invariant = invariant;
options.ConnectionString = connectionString;
});