Tüm Ürünler
Search
Belge Merkezi

Enterprise Distributed Application Service:Implement load balancing

Son Güncelleme:Oct 03, 2026

Bir hizmet adı altında birden fazla örnek çalıştığında, istekleri bu örneklere dağıtmak için bir mekanizma gerekir. Enterprise Distributed Application Service (EDAS) üzerindeki Spring Cloud uygulamaları, istemci taraflı yük dengeleme için Ribbon kullanır. Ribbon, RestTemplate ve Feign üzerinden yapılan hizmet çağrılarını keserek istekleri Nacos'a kayıtlı örneklere dağıtır.

Çalışma mantığı

Nacos, hizmet kayıt defteri olarak görev yapar. Bir hizmet tüketicisi bir sağlayıcıyı adına göre çağırdığında (örneğin, http://service-provider/query), Ribbon bu adı kayıtlı örnek listesine çözümler ve istekleri bunlar arasında dağıtır.

Nacos, standart com.netflix.loadbalancer.ServerList arayüzünü NacosServerList aracılığıyla uygular. Diğer hizmet keşif araçları da aynı arayüzü kullanır:

Hizmet keşif aracı ServerList uygulaması
Nacos NacosServerList
Eureka DomainExtractingServerList
Consul ConsulServerList
ZooKeeper ZookeeperServerList

Tüm uygulamalar bu ortak arayüzü paylaştığından, Eureka, Consul veya ZooKeeper'dan Spring Cloud Alibaba'ya geçiş yaparken RestTemplate, Feign veya kullanım dışı bırakılmış AsyncRestTemplate kodunuzda herhangi bir değişiklik yapmanız gerekmez.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Nacos'u hizmet kayıt defteri olarak kullanan ve EDAS üzerinde dağıtılmış bir Spring Cloud uygulaması

  • En az bir hizmet sağlayıcı ve bir hizmet tüketicisi

  • (İsteğe bağlı) EDAS ile Hystrix arasındaki uyumluluğu sağlamak için tüketiciye eklenmiş Hystrix bağımlılığı. Geri dönüş niteliğini destekler. Sentinel ile de uygulanabilir.

Örnek uygulamalar

Adımları takip etmek için demo projelerini indirin:

RestTemplate'e yük dengeleme ekleme

RestTemplate, RESTful hizmetler için kullanılan bir Spring HTTP istemcisidir. İstemci taraflı yük dengelemeyi etkinleştirmek için bir RestTemplate bean'ine @LoadBalanced ek açıklamasını ekleyin.

public class MyApp {

    // The @LoadBalanced annotation adds LoadBalancerInterceptor to this RestTemplate.
    // LoadBalancerInterceptor uses RibbonLoadBalancerClient to distribute requests
    // across service instances registered in Nacos.
    @Autowired
    private RestTemplate restTemplate;

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    // Use the service name ("service-provider") instead of a hostname.
    // Ribbon resolves it to an available instance.
    public void doSomething() {
        Foo foo = restTemplate.getForObject("http://service-provider/query", Foo.class);
        doWithFoo(foo);
    }

    ...
}
  • @LoadBalanced ek açıklamasının @Bean yöntemine uygulanması, istekleri RibbonLoadBalancerClient üzerinden yönlendiren bir LoadBalancerInterceptor kaydeder.

  • URL'de ana bilgisayar adı olarak hizmet adını (örneğin, service-provider) kullanın. Ribbon bu adı kullanılabilir bir örneğin IP adresi ve bağlantı noktasıyla değiştirir.

Feign'e yük dengeleme ekleme

Feign, RESTful API çağrılarını basitleştiren bildirim temelli bir HTTP istemcisidir. Bir Feign istemcisi Nacos'ta kayıtlı bir hizmet adına başvurduğunda yük dengeleme otomatik olarak çalışır.

  1. 1. Adım: Feign'i etkinleştirin

    Spring Boot uygulama sınıfınıza @EnableFeignClients ek açıklamasını ekleyin:

    @SpringBootApplication
    @EnableFeignClients
    public class MyApplication {
        ...
    }
  2. 2. Adım: Bir Feign istemci arayüzü tanımlayın

    @FeignClient ile açıklamalı bir arayüz oluşturun. name parametresini hedef hizmet adına ayarlayın:

    @FeignClient(name = "service-provider")
    public interface EchoService {
        @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
        String echo(@PathVariable("str") String str);
    }
  3. 3. Adım: Feign istemcisini enjekte edin ve çağırın

    Arayüzü enjekte edin ve yöntemlerini çağırın. Her çağrı, service-provider örneklerinden birine bir HTTP isteği tetikler:

    public class MyService {
    
        @Autowired
        private EchoService echoService;
    
        public void doSomething() {
            // Equivalent to GET http://service-provider/echo/test
            // Ribbon selects an instance from Nacos and routes the request.
            echoService.echo("test");
        }
    
        ...
    }

Yük dengelemeyi doğrulama

service-consumer hizmeti ve birden fazla service-provider hizmeti başlatıldıktan sonra, yük dengelemenin uygulanıp uygulanmadığını kontrol etmek için service-consumer tarafından sağlanan URL'ye erişin.

  • RestTemplate

    /echo-rest/rest-test adresine birkaç kez erişin ve isteklerin farklı örneklere iletilip iletilmediğini kontrol edin.

  • Feign

    /echo-feign/feign-test adresine birkaç kez erişin ve isteklerin farklı örneklere iletilip iletilmediğini kontrol edin.