-
-
Notifications
You must be signed in to change notification settings - Fork 9
Load balancing scenario
Olivier Lefebvre edited this page Dec 19, 2018
·
3 revisions
The package contains two version of the dynamic manager: PersistentDynamicManager<TSchemeDefinition> and NoPersistentDynamicManager<TSchemeDefinition>.
You can use an instance NoPersistentDynamicManager<TSchemeDefinition> to update the schemes configuration locally when receiving a notification sent by the Pub/Subscribe mechanisme of your choice :
public class SchemeChangeSubscriber
{
private readonly NoPersistentDynamicManager<SchemeDefinition> _manager;
private readonly IDynamicProviderStore<SchemeDefinition> _store;
public SchemeChangeSubscriber(NoPersistentDynamicManager<SchemeDefinition> manager, IDynamicProviderStore<SchemeDefinition> store)
{
_manager = manager;
_store = store;
}
/// <summary>
/// Called when scheme change.
/// </summary>
/// <param name="change">The change.</param>
/// <returns></returns>
public async Task OnSchemeChange(SchemeChange change)
{
var definition = await _store.FindBySchemeAsync(change.Scheme);
switch(change.Kind)
{
case SchemeChangeKind.Added:
await _manager.AddAsync(definition);
break;
case SchemeChangeKind.Updated:
await _manager.UpdateAsync(definition);
break;
case SchemeChangeKind.Deleted:
await _manager.RemoveAsync(change.Scheme);
break;
}
}
}
public enum SchemeChangeKind
{
Added,
Updated,
Deleted
}
public class SchemeChange
{
public string Scheme { get; set; }
public SchemeChangeKind Kind { get; set; }
}