我有两个Eureka服务器实例,每个服务器中都注册了不同的服务(多个实例)。我有一个客户端应用程序,可以对每个Eureka服务器中注册的服务进行其余调用。我正在使用rest模板通过服务名称对这些服务进行rest调用。在这种情况下,LoadBalanced其余模板无法正常工作。我需要有关如何实现此目标的信息。
gpu
这是我剩下的模板。我有两个完全独立的Eureka服务器。我希望我的应用程序能够使用service-name和rest模板与在这两个服务器上注册的应用程序进行通信。
答案 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个服务和一个发现服务器并想使用其中一个服务通过@LoadBalanced
和RestTemplate
调用其他两个服务时,我遇到了同样的问题
这是我修复的方式:
在所有eureka客户端的application.properties文件中,我必须添加--
eureka.instance.prefer-ip-address=true
这为我解决了