Nanophone
Nanophone is a minimalistic library for Service Registration and Discovery and is used by the Equalizer middleware for aspnetcore.
Features:
- Find available service instances by service name
- Find available service instances by service name and version (strict semver 2.0)
- Extensible service registry host - includes Consul and in-memory hosts
- Extensible service registry tenants - includes Nancy and Web Api tenants
- Supports eBay Fabio
- Configuration provider for aspnetcore to use Consul key/value store
- Application services for aspnetcore to add tenants and health checks
Usage:
- Find available service instances by service name:
using System.Threading.Tasks;
using Nanophone.Core;
using Nanophone.RegistryHost.ConsulRegistry;
var serviceRegistry = new ServiceRegistry();
serviceRegistry.StartClient(new ConsulRegistryHost());
var instances = serviceRegistry.FindServiceInstancesAsync("my-service-name").Result;
foreach (var instance in instances)
{
Console.WriteLine($"Address: {instance.Address}:{instance.Port}, Version: {instance.Version}");
}
- Find available service instances by service name and version (strict semver 2.0):
using System.Threading.Tasks;
using Nanophone.Core;
using Nanophone.RegistryHost.ConsulRegistry;
var serviceRegistry = new ServiceRegistry();
serviceRegistry.StartClient(new ConsulRegistryHost());
var instances = serviceRegistry.FindServiceInstancesWithVersionAsync("my-service-name", ">=1.2.0 <3.2.0").Result;
foreach (var instance in instances)
{
Console.WriteLine($"Address: {instance.Address}:{instance.Port}, Version: {instance.Version}");
}
NOTE: A full semver-compliant version is required. This means that e.g. "2.1" is not a valid version, and "2.1.0" or "2.1.1-beta2" are valid versions.
- Start Nancy service:
using Nanophone.Core;
using Nanophone.RegistryHost.ConsulRegistry;
using Nanophone.RegistryTenant.Nancy;
var serviceRegistry = new ServiceRegistry();
serviceRegistry.AddTenant(new NancyRegistryTenant(new Uri("http://localhost:9001")), new ConsulRegistryHost(),
"customers", "1.3.3");
- Start Web Api service:
using Microsoft.Owin.Hosting;
using Nanophone.Core;
using Nanophone.RegistryHost.ConsulRegistry;
using Nanophone.RegistryTenant.WebApi;
string url = "http://localhost:9000/";
var serviceRegistry = new ServiceRegistry();
serviceRegistry.AddTenant(new WebApiRegistryTenant(new Uri(url)), new ConsulRegistryHost(),
"date", "1.7.0-pre");
WebApp.Start<Startup>(url);
- Configuration provider for aspnetcore:
var config = new ConfigurationBuilder()
.AddNanophoneKeyValues(() => new ConsulRegistryHost())
.Build();
string value = new WebHostBuilder()
.UseConfiguration(config)
.GetSetting("my_key");
- Application services for aspnetcore:
var hostBuilder = new WebHostBuilder()
.ConfigureServices(services =>
{
services.AddNanophone(() => new ConsulRegistryHost());
})
.Configure(app =>
{
app.AddTenant(new WebApiRegistryTenant(new Uri("http://localhost:1234")), nameof(MyService), "1.0.0");
var serviceRegistry = app.ApplicationServices.GetService<ServiceRegistry>();
var instances = await serviceRegistry.FindServiceInstancesAsync(nameof(MyService));
});
Thanks
- SIM Card icon by misirlou from The Noun Project
- Look, up in the sky. It's a bird. It's a plane. It's LibLog!