Add Role based grain placement

This commit is contained in:
2025-09-18 20:17:28 +07:00
parent 530dd83daa
commit c2f3734021
16 changed files with 404 additions and 18 deletions

View File

@@ -14,6 +14,7 @@ using Managing.Application.Grains;
using Managing.Application.ManageBot;
using Managing.Application.ManageBot.Commands;
using Managing.Application.MoneyManagements;
using Managing.Application.Orleans;
using Managing.Application.Scenarios;
using Managing.Application.Shared;
using Managing.Application.Shared.Behaviours;
@@ -138,10 +139,12 @@ public static class ApiBootstrap
}
var postgreSqlConnectionString = configuration.GetSection("PostgreSql")["Orleans"];
var siloRole = Environment.GetEnvironmentVariable("SILO_ROLE") ?? "Trading";
Console.WriteLine($"Task Slot: {taskSlot}");
Console.WriteLine($"Hostname: {hostname}");
Console.WriteLine($"Advertised IP: {advertisedIP}");
Console.WriteLine($"Role: {siloRole}");
Console.WriteLine($"Silo port: {siloPort}");
Console.WriteLine($"Gateway port: {gatewayPort}");
Console.WriteLine($"Dashboard port: {dashboardPort}");
@@ -174,8 +177,8 @@ public static class ApiBootstrap
.Configure<SiloOptions>(options =>
{
// Configure silo address for multi-server clustering
options.SiloName = $"ManagingApi-{taskSlot}";
// Orleans will use the configured endpoints for clustering
options.SiloName = $"ManagingApi-{taskSlot}-{siloRole}";
Console.WriteLine($"Configuring silo with role: {siloRole}");
});
}
else
@@ -327,6 +330,10 @@ public static class ApiBootstrap
siloBuilder
.ConfigureServices(services =>
{
// Register custom placement directors for role-based placement
services.AddPlacementDirector<ComputePlacementStrategy, ComputePlacementDirector>();
services.AddPlacementDirector<TradingPlacementStrategy, TradingPlacementDirector>();
// Register existing services for Orleans DI
// These will be available to grains through dependency injection
services.AddTransient<IExchangeService, ExchangeService>();