微服务—负载均衡—Feign

将controller配置为多服务,动态选择服务器

从consumer通过远端访问provider,从provider动态选择服务器进行服务

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应用实践

第一步:添加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

第二步:在启动类上添加@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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值