中国建设协会网站,祖庙高明网站建设,怎么做网站卖美瞳,郫县城乡规划建设管理局网站文章目录 版本1#xff1a;原始loadBalancerClient方案版本2#xff1a;ribbon-loadbalancer方案版本3#xff1a;openfeign方案#xff08;即**方案2openfeign版本**#xff09; 本文描述了Spring Cloud微服务中#xff0c;各个服务间调用的负载均衡方案的升级历史… 文章目录 版本1原始loadBalancerClient方案版本2ribbon-loadbalancer方案版本3openfeign方案即**方案2openfeign版本** 本文描述了Spring Cloud微服务中各个服务间调用的负载均衡方案的升级历史目前市场通用的是openfeign方案。 版本1原始loadBalancerClient方案
1、引入负载均衡组件
!-- 在消费者侧添加负载均衡组件 --
!-- 组件的作用是注册了一个LoadBalancerClient类型的bean --
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-loadbalancer/artifactId
/dependency2、使用负载均衡组件
RestController
public class NacosController{Autowiredprivate LoadBalancerClient loadBalancerClient;Autowiredprivate RestTemplate restTemplate;Value(${spring.application.name})private String appName;GetMapping(/echo/app-name)public String echoAppName(){// 1ServiceInstance serviceInstance loadBalancerClient.choose(nacos-provider);String path String.format(http://%s:%s/echo/%s,serviceInstance.getHost(),serviceInstance.getPort(),appName);System.out.println(request path: path);// 2return restTemplate.getForObject(path,String.class);}
}在代码1处首先用复杂均衡组件提供的LoadBalancerClient选择出具体是哪一个微服务instance提供服务然后在代码2处请求具体的instance获取结果。 注意 1、此时的RestTemplate就是原始的RestTemplate而没有加LoadBalance注解因为负载均衡功能已经由loadBalancerClient完成了。 Bean
public RestTemplate restTemplate(){return new RestTemplate();
}版本2ribbon-loadbalancer方案
1、引入组件
dependencygroupIdcom.netflix.ribbon/groupIdartifactIdribbon-loadbalancer/artifactId
/dependency2、如何使用
添加了负载均衡的RestTemplate
Bean
LoadBalanced
public RestTemplate restTemplate(){return new RestTemplate();
}正常调用
RestControllerpublic class TestController {Autowiredprivate RestTemplate restTemplate;GetMapping(value /echo-rest/{str})public String rest(PathVariable String str) {// 会负载均衡服务名称nacos-providerreturn restTemplate.getForObject(http://nacos-provider/echo/ str, String.class);}
}版本3openfeign方案即方案2openfeign版本
该方案是目前市场流行度较高的方案用接口FeignClient注解方式。
1、引入组件
openfeign 会间接引入LoadBalance注解及负载均衡功能。
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId
/dependency2、如何使用
远程接口
FeignClient(name nacos-provider)
public interface EchoService {GetMapping(value /echo/{str})String echo(PathVariable(str) String str);
}添加了负载均衡的RestTemplate
Bean
LoadBalanced
public RestTemplate restTemplate(){return new RestTemplate();
}接口实现
RestControllerpublic class TestController {Autowiredprivate RestTemplate restTemplate;GetMapping(value /echo-rest/{str})public String rest(PathVariable String str) {// 会负载均衡服务名称nacos-providerreturn restTemplate.getForObject(http://nacos-provider/echo/ str, String.class);}
}验证结果是成功的。
参考代码https://gitee.com/firefish985/FireFish/FireFish-Learning/nacos-discovery-consumer