Akka.Coordination.Azure
1.5.26
Prefix Reserved
See the version list below for details.
dotnet add package Akka.Coordination.Azure --version 1.5.26
NuGet\Install-Package Akka.Coordination.Azure -Version 1.5.26
<PackageReference Include="Akka.Coordination.Azure" Version="1.5.26" />
paket add Akka.Coordination.Azure --version 1.5.26
#r "nuget: Akka.Coordination.Azure, 1.5.26"
// Install Akka.Coordination.Azure as a Cake Addin #addin nuget:?package=Akka.Coordination.Azure&version=1.5.26 // Install Akka.Coordination.Azure as a Cake Tool #tool nuget:?package=Akka.Coordination.Azure&version=1.5.26
Azure Blob Storage Lease
This module is an implementation of an Akka Coordination Lease backed by Azure Blob Storage in Azure. Resources in Azure can offer concurrency control and consistency that have been used to build a distributed lease/lock.
A lease can be used for:
- Split Brain Resolver. An additional safety measure so that only one SBR instance can make the decision to remain up.
- Cluster Singleton. A singleton manager can be configured to acquire a lease before creating the singleton.
- Cluster Sharding. Each Shard can be configured to acquire a lease before creating entity actors.
In all cases the use of the lease increases the consistency of the feature. However, as the Azure Blob Storage server can also be subject to failure and network issues any use of this lease can reduce availability.
Lease Instances
- With Split Brain Resolver there will be one lease per Akka Cluster
- With multiple Akka Clusters using SBRs in the same namespace, you must ensure different
ActorSystem
names because they all need a separate lease. - With Cluster Sharding and Cluster Singleton there will be more leases
- For Cluster Singleton there will be one per singleton.
- For Cluster Sharding, there will be one per shard per type.
Configuring
Enable In SBR Using Akka.Cluster.Hosting
To enable Azure lease inside SBR, you need to pass a LeaseMajorityOption
instance into the second parameter of the WithClustering()
extension method and specify that you're using the Azure lease implementation.
using var host = new HostBuilder()
.ConfigureServices((context, services) =>
{
services.AddAkka("azureLeaseDemo", (builder, provider) =>
{
builder
.WithRemoting("<akka-node-host-name-or-ip>", 4053)
.WithClustering(sbrOption: new LeaseMajorityOption
{
LeaseImplementation = AzureLeaseOption.Instance,
LeaseName = "myActorSystem-akka-sbr"
})
.WithAzureLease("<your-Azure-Blob-Storage-connection-string>");
});
}).Build();
await host.RunAsync();
Enable In SBR Using HOCON Configuration
To enable the lease for use within SBR:
akka.cluster {
downing-provider-class = "Akka.Cluster.SBR.SplitBrainResolverProvider, Akka.Cluster"
split-brain-resolver {
active-strategy = lease-majority
lease-majority {
lease-implementation = "akka.coordination.lease.azure"
}
}
}
Full configuration options
akka.coordination.lease.azure {
lease-class = "Akka.Coordination.Azure.AzureLease, Akka.Coordination.Azure"
connection-string = ""
# Container to create the lock in.
container-name = "akka-coordination-lease"
# How often to write time into CRD so that if the holder crashes
# another node can take the lease after a given timeout. If left blank then the default is
# max(5s, heartbeat-timeout / 10) which will be 12s with the default heartbeat-timeout
heartbeat-interval = ""
# How long a lease must not be updated before another node can assume the holder has crashed.
# If the lease holder hasn't crashed its next heart beat will fail due to the version
# having been updated
heartbeat-timeout = 120s
# The individual timeout for each HTTP request. Defaults to 2/5 of the lease-operation-timeout
# Can't be greater than then lease-operation-timeout
api-service-request-timeout = ""
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Akka.Cluster (>= 1.5.26)
- Akka.Cluster.Hosting (>= 1.5.25)
- Akka.Discovery (>= 1.5.26)
- Akka.Hosting (>= 1.5.25)
- Azure.Identity (>= 1.12.0)
- Azure.Storage.Blobs (>= 12.20.0)
- Google.Protobuf (>= 3.27.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.5.31 | 289 | 11/11/2024 |
1.5.30 | 1,611 | 10/3/2024 |
1.5.29 | 115 | 10/1/2024 |
1.5.27 | 423 | 7/30/2024 |
1.5.26.1 | 1,494 | 7/16/2024 |
1.5.26 | 123 | 7/15/2024 |
1.5.26-beta3 | 74 | 7/2/2024 |
1.5.26-beta2 | 99 | 6/28/2024 |
1.5.26-beta1 | 92 | 6/27/2024 |
1.5.25.1 | 628 | 6/25/2024 |
1.5.25 | 132 | 6/17/2024 |
1.5.24 | 224 | 6/11/2024 |
1.5.19 | 1,142 | 4/17/2024 |
1.5.18-beta2 | 69 | 3/27/2024 |
1.5.18-beta1 | 89 | 3/20/2024 |
1.5.17.1 | 709 | 3/4/2024 |
1.5.15 | 2,336 | 1/12/2024 |
1.5.7 | 2,743 | 5/23/2023 |
1.5.5 | 165 | 5/8/2023 |
1.5.0 | 971 | 3/2/2023 |
1.5.0-beta6 | 150 | 3/1/2023 |
1.5.0-alpha4 | 140 | 2/17/2023 |
1.0.3 | 425 | 2/13/2023 |
1.0.2 | 288 | 2/8/2023 |
1.0.1 | 306 | 1/31/2023 |
1.0.0 | 309 | 1/18/2023 |
1.0.0-beta2 | 174 | 1/7/2023 |
1.0.0-beta1 | 177 | 1/6/2023 |
0.3.0-beta4 | 159 | 12/2/2022 |
0.3.0-beta3 | 227 | 11/7/2022 |
0.3.0-beta2 | 213 | 10/20/2022 |
0.3.0-beta1 | 163 | 10/6/2022 |
Update to [Akka.NET v1.5.26](https://github.com/akkadotnet/akka.net/releases/tag/1.5.26)
[Discovery.KubernetesApi: Add multi-config support](https://github.com/akkadotnet/Akka.Management/pull/2596)
[Discovery.Azure: Add multi-config support](https://github.com/akkadotnet/Akka.Management/pull/2595)
[Discovery.Azure: Always apply TableClientOptions to TableClient](https://github.com/akkadotnet/Akka.Management/pull/2650)
[Discovery.Azure: Implement missing IExtension implementation](https://github.com/akkadotnet/Akka.Management/pull/2653)
[Discovery.Azure: Refactor `AkkaDiscoveryOptions` to `AzureDiscoveryOptions`](https://github.com/akkadotnet/Akka.Management/pull/2653)
[Discovery.Config: Add multi-config support](https://github.com/akkadotnet/Akka.Management/pull/2604)
[Discovery.AwsApi: Add multi-config support](https://github.com/akkadotnet/Akka.Management/pull/2651)
[ClusterBootstrap: Update probe-interval and stale contact point timeout calculation](https://github.com/akkadotnet/Akka.Management/pull/2601)
[Management: Cluster bootstrap endpoint returns empty seed if it is not part of a cluster](https://github.com/akkadotnet/Akka.Management/pull/2636)
[Management: Add Remote address and ClusterClientReceptionist actor path endpoint](https://github.com/akkadotnet/Akka.Management/pull/2614)
[Management: Harden ClusterClientReceptionist actor path endpoint](https://github.com/akkadotnet/Akka.Management/pull/2615)
Update dependency NuGet package versions to latest versions
Akka.Discovery.Azure AkkaDiscoveryOptions is not obsolete**
`AkkaDiscoveryOptions` class has been made obsolete because the name was a typo, the correct class to use from now on is `AzureDiscoveryOptions`. The old `AkkaDiscoveryOptions` class is marked with the `Obsolete` attribute so users can migrate to the correct option class in the future.