栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微服务—负载均衡—Feign

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微服务—负载均衡—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应用实践

第一步:添加依赖


    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 返回客户端,将信息流解析成为接口返回数据。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/343048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号