loadBalancerClient.choose(“sca-provider”)
占位符:%s
//访问地址:http://localhost:8090/consumer/doRestEcho2 @Autowired private LoadBalancerClient loadBalancerClient; @GetMapping("/consumer/doRestEcho2") public String doRestEcho02(){ ServiceInstance serviceInstance = loadBalancerClient.choose("sca-provider"); String url = String.format("http://%s:%s/provider/echo/%s", serviceInstance.getHost(),serviceInstance.getPort(),appName); System.out.println("request url:"+url); return restTemplate.getForObject(url, String.class); }将负载均衡拦截器注入到创建的对象中
运用@LoadBalanced注解
@Bean @LoadBalanced//将负载均衡拦截器注入到这个对象中 public RestTemplate loadBalancedRestTemplate(){ return new RestTemplate(); }
底层运用拦截器做了负载均衡
可以将上面02代码代码进行简化
//访问地址:http://localhost:8090/consumer/doRestEcho3 @Autowired private RestTemplate loadBalancedRestTemplate; @GetMapping("/consumer/doRestEcho3") public String doRestEcho03(){ String url = "http://sca-provider/provider/echo/"+appName; return loadBalancedRestTemplate.getForObject(url, String.class); }Feign应用实践
第一步:添加依赖
org.springframework.cloud spring-cloud-starter-openfeign
第二步:在启动类上添加@EnableFeignClients注解
第三步:创建service,通过service远程取调用服务
//用于定义远程调用规范,name名字作为RemoteProviderService接口实现类的Bean对象的名字 @FeignClient(name = "sca-provider") public interface RemoteProviderService { @GetMapping("/provider/echo/{msg}") String echoMsg(@PathVariable("msg") String msg); }Feign 调用过程分析(了解)
Feign应用过程分析(底层逻辑先了解):
1)通过 @EnableFeignCleints 注解告诉springcloud,启动 Feign Starter 组件。
2) Feign Starter 在项目启动过程中注册全局配置,扫描包下所由@FeignClient注解描述的接口,然后由系统底层创建接口实现类(JDK代理类),并构建类的对象,然后交给spring管理(注册 IOC 容器)。
3) 接口被调用时被动态代理类逻辑拦截,将 @FeignClient 请求信息通过编码器生成 Request对象,基于此对象进行远程过程调用。
4) 请求对象经Ribbon进行负载均衡,挑选出一个健康的 Server 实例(instance)。
5) 通过 Client 携带 Request 调用远端服务返回请求响应。
6) 通过解码器生成 Response 返回客户端,将信息流解析成为接口返回数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)