双机热备,指两个一模一样的微服务,两个同时在运行,但是只有一个在工作,当工作中的微服务垮掉后,另一个会自行补上。
要实现这个,需要用到分布式锁。原理时,相同的微服务,启动时,锁定相同的key,锁成功的,继续运行,未锁成功的,不断重试,直到锁成功,再继续运行。
var microServiceHost = new MicroServiceHost(services); microServiceHost.Register<Controllers.MyServiceController>("MyService"); //这里先把服务设置为不可用的状态 microServiceHost.SetServiceEnable("MyService", false); microServiceHost.ServiceProviderBuilded += Msp_ServiceProviderBuilded; microServiceHost.Build(port, HostEnvironment.GatewayAddresses) .Run();
在ServiceProviderBuilded事件中,开始不断尝试锁住某个key
private static void Msp_ServiceProviderBuilded(object sender, IServiceProvider e) { var locker = e.GetService<IKeyLocker>(); while( locker.TryLock("T" + Thread.CurrentThread.ManagedThreadId, "MyService_lock_name") == false) { Thread.Sleep(1000); }
//把服务设置为可用的状态
microServiceHost.SetServiceEnable("MyService", true);
//继续执行其他代码
}