public static void Init() { if (WcfServiceAddress.IndexOf("Localhost", StringComparison.Ordinal) != -1) { var ips = IpExtensions.GetInternetIpsWithoutVirtual(); if (ips.Count >= 1) { Settings.Default.WcfServiceAddress = WcfServiceAddress.Replace("Localhost", ips[0]); } } }
public static Address ToAddress(this EndPoint endpoint, ActorSystem system) { var dns = endpoint as DnsEndPoint; if (dns != null) { return(new Address(AkkaIOTransport.Protocal, system.Name, dns.Host, dns.Port)); } var ip = endpoint as IPEndPoint; if (ip != null) { return(new Address(AkkaIOTransport.Protocal, system.Name, IpExtensions.MapToIPv4(ip.Address).ToString(), ip.Port)); } throw new ArgumentException("endpoint"); }
/// <summary> /// /// </summary> /// <param name="app"></param> /// <param name="applicationLifetime"></param> /// <returns></returns> public static IApplicationBuilder RegisterConsul(this IApplicationBuilder app, IHostApplicationLifetime applicationLifetime) { //获取server ip address 指定ip和端口的才可以获取 var features = app.Properties["server.Features"] as FeatureCollection; var addresses = features?.Get <IServerAddressesFeature>(); var address = addresses?.Addresses.First(); //建立连接的client var ip = IpExtensions.GetLocalIPv4(NetworkInterfaceType.Wireless80211); var client = app.ApplicationServices.GetRequiredService <IConsulClient>(); var consulConfig = app.ApplicationServices.GetRequiredService <IOptions <ConsulConfig> >(); var loggingFactory = app.ApplicationServices.GetRequiredService <ILoggerFactory>(); var logger = loggingFactory.CreateLogger <IApplicationBuilder>(); var uri = new Uri(address); var healthchecks = new AgentServiceCheck() { Interval = TimeSpan.FromMinutes(1), HTTP = $"{uri.Scheme}://{uri.Host}:{uri.Port}/api/health/status" }; var register = new AgentServiceRegistration { ID = consulConfig.Value.ServiceId, Name = consulConfig.Value.ServiceName, Address = $"{uri.Scheme}://{uri.Host}", Port = uri.Port, Check = healthchecks, Tags = new[] { "webapi" } }; logger.LogInformation("Register with consul"); client.Agent.ServiceRegister(register).Wait(); // client.Agent.ServiceDeregister(register.ID).Wait(); //注入 应用生命周期结束的回调 applicationLifetime.ApplicationStopping.Register(() => { logger.LogInformation("DeRegister with consul"); client.Agent.ServiceDeregister(register.ID).Wait(); }); return(app); }