public static IFeignBuilder AddFeignClients(this IServiceCollection services, FeignOptions options) { if (options == null) { options = new FeignOptions(); } FeignBuilder feignBuilder = new FeignBuilder(); feignBuilder.Services = services; feignBuilder.Options = options; if (options.Assemblies.Count == 0) { AddFeignClients(feignBuilder.FeignClientTypeBuilder, services, Assembly.GetEntryAssembly(), options.Lifetime); } else { foreach (var assembly in options.Assemblies) { AddFeignClients(feignBuilder.FeignClientTypeBuilder, services, assembly, options.Lifetime); } } services.TryAddSingleton(options); feignBuilder.FeignClientTypeBuilder.FinishBuild(); return(feignBuilder); }
private static void Main(string[] args) { var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { // {"time:ribbon:MaxAutoRetries","0" }, {"time:ribbon:MaxAutoRetriesNextServer","1" }, // {"time:ribbon:OkToRetryOnAllOperations","true" }, { "time:ribbon:ListOfServers:0", "http://localhost:6001" }, { "time:ribbon:ListOfServers:1", "http://localhost:6002" }, // {"time:ribbon:LoadBalancerRuleTypeName",typeof(RoundRobinRule).FullName }, { "time:ribbon:Timeout", "00:00:05" } }) .Build(); var serviceCollection = new ServiceCollection() .AddOptions() .AddHttpClient() .AddSingleton <IConfiguration>(configuration) .AddRibbonClient(b => b.AddHttpClient()); // use Feign { var feignBuilder = new FeignBuilder(serviceCollection.AddFeign().BuildServiceProvider()); serviceCollection.AddSingleton(feignBuilder.TargetByAttribute <ITimeService>()); var services = serviceCollection.BuildServiceProvider(); var timeService = services.GetService <ITimeService>(); while (true) { Task.Run(async() => { var now = await timeService.GetNowAsync(); Console.WriteLine("Content: " + now); Console.ReadLine(); }).Wait(); } } // use HttpClient { var services = serviceCollection.BuildServiceProvider(); var client = services.GetRequiredService <IHttpClientFactory>().CreateClient("time"); Task.Run(async() => { while (true) { var responseMessage = await client.GetAsync("/time"); var uri = responseMessage.RequestMessage.RequestUri; Console.WriteLine($"From Server: {uri.Host}:{uri.Port}"); Console.WriteLine("Content: " + await responseMessage.Content.ReadAsStringAsync()); Console.ReadLine(); } }).Wait(); } }
private static void Main(string[] args) { var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); var serviceCollection = new ServiceCollection() .AddOptions() .AddHttpClient() .AddSingleton <IConfiguration>(configuration) .AddConsulDiscoveryClient(configuration) .AddRibbonClient(b => b.AddHttpClient().AddConsulDiscovery()); // use Feign { var feignBuilder = new FeignBuilder(serviceCollection.AddFeign().BuildServiceProvider()); serviceCollection.AddSingleton(feignBuilder.TargetByAttribute <ITimeService>()); var services = serviceCollection.BuildServiceProvider(); var timeService = services.GetService <ITimeService>(); while (true) { Task.Run(async() => { var now = await timeService.GetNowAsync(); Console.WriteLine("Content: " + now); Console.ReadLine(); }).Wait(); } } // use HttpClient { var services = serviceCollection.BuildServiceProvider(); var client = services.GetRequiredService <IHttpClientFactory>().CreateClient("timeService"); Task.Run(async() => { while (true) { var responseMessage = await client.GetAsync("/time"); var uri = responseMessage.RequestMessage.RequestUri; Console.WriteLine($"From Server: {uri.Host}:{uri.Port}"); Console.WriteLine("Content: " + await responseMessage.Content.ReadAsStringAsync()); Console.ReadLine(); } }).Wait(); } }