High performance, distributed unique thread-safe id generator for Azure.
- Human-friendly generated ids (number)
- High performant and fast
- 100% guarantee that won't cause any duplicate ids
The project is rely on Azure Blob Storage. AutoNumber
package will generate ids by using a single text file on the Azure Blob Storage.
var blobServiceClient = new BlobServiceClient(connectionString);
var blobOptimisticDataStore = new BlobOptimisticDataStore(blobServiceClient, "unique-ids");
var idGen = new UniqueIdGenerator(blobOptimisticDataStore);
// generate ids with different scopes
var id = idGen.NextId("urls");
var id2 = idGen.NextId("orders");
The project has an extension method to add it and its dependencies to Microsoft ASP.NET DI. The only caveat is you need to registry type of BlobServiceClient
in DI before registring AutoNumber
.
Use options builder to configure the service, take into account the default settings will read from appsettings.json
.
services.AddAutoNumber(Configuration, x =>
{
return x.UseContainerName("container-name")
.UseStorageAccount("connection-string-or-connection-string-name")
//.UseBlobServiceClient(blobServiceClient)
.SetBatchSize(10)
.SetMaxWriteAttempts(100)
.Options;
});
// configure the services
// you need to register an instane of CloudStorageAccount before using this
serviceCollection.AddAutoNumber();
public class Foo
{
public Foo(IUniqueIdGenerator idGenerator)
{
_idGenerator = idGenerator;
}
}
These are default configuration for AutoNumber
. If you prefer registering AutoNumber with AddAddNumber
method, these options can be set via appsettings.json
.
{
"AutoNumber": {
"BatchSize": 50,
"MaxWriteAttempts": 25,
"StorageContainerName": "unique-urls"
}
}
Support this proejct and me via paypal
Most of the credits of this library goes to Tatham Oddie for making SnowMaker. I forked his work and made lots of change to make it available on .NET Standard (2.0 and 2.1). SnowMaker is out-dated and is using very old version of Azure Packages.