负载均衡的休息模板

时间:2018-11-04 20:49:28

标签: spring spring-boot resttemplate netflix-eureka

我有两个Eureka服务器实例,每个服务器中都注册了不同的服务(多个实例)。我有一个客户端应用程序,可以对每个Eureka服务器中注册的服务进行其余调用。我正在使用rest模板通过服务名称对这些服务进行rest调用。在这种情况下,LoadBalanced其余模板无法正常工作。我需要有关如何实现此目标的信息。

gpu

这是我剩下的模板。我有两个完全独立的Eureka服务器。我希望我的应用程序能够使用service-name和rest模板与在这两个服务器上注册的应用程序进行通信。

4 个答案:

答案 0 :(得分:0)

如果您将Spring ZUUL用作网关,它将自动对请求进行负载平衡。或者可以使用以下代码以编程方式完成

LoadBalanced是Spring Cloud Commons https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-commons

的一部分
import org.springframework.cloud.client.loadbalancer.LoadBalanced;

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

答案 1 :(得分:0)

您可以尝试这个。这是如何获取实例和发送请求的另一个示例。让我知道这是否有帮助。

属性更改 eureka.client.serviceUrl.defaultZone = eureka server1 url,eureka server2 url2

这将在Eureka和实例之间实现负载平衡。

import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.client.RestTemplate;

@RestController
public class HelloController {

    @Autowired
    RestTemplate restTemplate;

    @Autowired
    LoadBalancerClient loadBalancerClient;

    public String calDirectly(String name){

        ServiceInstance serviceinstance = loadBalancerClient.choose("<service name>");

            ResponseEntity<String> restExchange =
                    restTemplate.exchange(
                            "http://"+serviceinstance.getHost()+":"+serviceinstance.getPort()+"<url & other parameter>",
                            HttpMethod.GET,
                            null, String.class, name);

            return restExchange.getBody();
    }

}

答案 2 :(得分:0)

您的客户端也必须在Eureka服务器上注册。 只有这样,才能通过名称致电服务。

答案 3 :(得分:0)

当我创建3个服务和一个发现服务器并想使用其中一个服务通过@LoadBalancedRestTemplate调用其他两个服务时,我遇到了同样的问题

这是我修复的方式:

在所有eureka客户端的application.properties文件中,我必须添加--

eureka.instance.prefer-ip-address=true

这为我解决了