Exemple #1
0
        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);
        }
Exemple #2
0
        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();
            }
        }
Exemple #3
0
        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();
            }
        }