-
Notifications
You must be signed in to change notification settings - Fork 2k
/
ZooKeeperHostingExtensions.cs
117 lines (110 loc) · 3.94 KB
/
ZooKeeperHostingExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
using System;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Orleans.Messaging;
using Orleans.Runtime.Membership;
using Orleans.Configuration;
namespace Orleans.Hosting
{
public static class ZooKeeperHostingExtensions
{
/// <summary>
/// Configures the silo to use ZooKeeper for cluster membership.
/// </summary>
/// <param name="builder">
/// The builder.
/// </param>
/// <param name="configureOptions">
/// The configuration delegate.
/// </param>
/// <returns>
/// The provided <see cref="ISiloBuilder"/>.
/// </returns>
public static ISiloBuilder UseZooKeeperClustering(
this ISiloBuilder builder,
Action<ZooKeeperClusteringSiloOptions> configureOptions)
{
return builder.ConfigureServices(
services =>
{
if (configureOptions != null)
{
services.Configure(configureOptions);
}
services.AddSingleton<IMembershipTable, ZooKeeperBasedMembershipTable>();
});
}
/// <summary>
/// Configures the silo to use ZooKeeper for cluster membership.
/// </summary>
/// <param name="builder">
/// The builder.
/// </param>
/// <param name="configureOptions">
/// The configuration delegate.
/// </param>
/// <returns>
/// The provided <see cref="ISiloBuilder"/>.
/// </returns>
public static ISiloBuilder UseZooKeeperClustering(
this ISiloBuilder builder,
Action<OptionsBuilder<ZooKeeperClusteringSiloOptions>> configureOptions)
{
return builder.ConfigureServices(
services =>
{
configureOptions?.Invoke(services.AddOptions<ZooKeeperClusteringSiloOptions>());
services.AddSingleton<IMembershipTable, ZooKeeperBasedMembershipTable>();
});
}
/// <summary>
/// Configure the client to use ZooKeeper for clustering.
/// </summary>
/// <param name="builder">
/// The builder.
/// </param>
/// <param name="configureOptions">
/// The configuration delegate.
/// </param>
/// <returns>
/// The provided <see cref="IClientBuilder"/>.
/// </returns>
public static IClientBuilder UseZooKeeperClustering(
this IClientBuilder builder,
Action<ZooKeeperGatewayListProviderOptions> configureOptions)
{
return builder.ConfigureServices(
services =>
{
if (configureOptions != null)
{
services.Configure(configureOptions);
}
services.AddSingleton<IGatewayListProvider, ZooKeeperGatewayListProvider>();
});
}
/// <summary>
/// Configure the client to use ZooKeeper for clustering.
/// </summary>
/// <param name="builder">
/// The builder.
/// </param>
/// <param name="configureOptions">
/// The configuration delegate.
/// </param>
/// <returns>
/// The provided <see cref="IClientBuilder"/>.
/// </returns>
public static IClientBuilder UseZooKeeperClustering(
this IClientBuilder builder,
Action<OptionsBuilder<ZooKeeperGatewayListProviderOptions>> configureOptions)
{
return builder.ConfigureServices(
services =>
{
configureOptions?.Invoke(services.AddOptions<ZooKeeperGatewayListProviderOptions>());
services.AddSingleton<IGatewayListProvider, ZooKeeperGatewayListProvider>();
});
}
}
}