其他分享
首页 > 其他分享> > JMS微服务开发示例(八)双机热备

JMS微服务开发示例(八)双机热备

作者:互联网

双机热备,指两个一模一样的微服务,两个同时在运行,但是只有一个在工作,当工作中的微服务垮掉后,另一个会自行补上。

要实现这个,需要用到分布式锁。原理时,相同的微服务,启动时,锁定相同的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);
            //继续执行其他代码 
}

 

标签:热备,microServiceHost,服务,示例,ServiceProviderBuilded,MyService,双机
来源: https://www.cnblogs.com/IWings/p/14079124.html