zoukankan      html  css  js  c++  java
  • Spring-Clould-Alibaba-集成Ribbon&Feign

    Spring-Clould-Alibaba-集成Ribbon

    1. RestTemplate上添加注解@LoadBalanced

    在这里插入图片描述

    2. 在调用时, 就可以使用服务名称来进行调用 , 和之前的使用Eureka方式 是一样的

    默认使用是轮询策略
    在这里插入图片描述

    @RequestMapping("/getGoods")
        public ResponseResult getGoods() {
            String url="http://goods-provide/getGoods";
            return ResponseResult.success("操作成功",
                    restTemplate.getForObject(url,Object.class));
        }
    

    3. 自定义负载均衡策略

    在启动类上添加
    在这里插入图片描述

    @Bean
        public IRule Irule(){
            return new RandomRule();//随机负载均衡
        }
    

    4. 配置懒加载

    在这里插入图片描述

    # 饥饿加载(懒加载) 已启动就获取服务
    ribbon:
      eager-load:
        enabled: true
        clients: goods-provide #多个服务使用逗号隔开
    

    5. Nacos集成Ribbon,支持权重的负载均衡算法

    1. 自定义权重算法
      创建一个类,继承AbstractLoadBalancerRule类 实现如下方法
      在这里插入图片描述
    public class IRuleConfig  extends AbstractLoadBalancerRule {
        @Autowired
        private NacosDiscoveryProperties nacosDiscoveryProperties;
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig) {
    
        }
        @Override
        public Server choose(Object key) {
            try {
                BaseLoadBalancer loadBalancer = (BaseLoadBalancer)this.getLoadBalancer();
                //获取请求微服务的名称
                String name = loadBalancer.getName();
                //获取nacos服务发现相关名称
                NamingService namingService = nacosDiscoveryProperties.namingServiceInstance();
                //nacos client自动通过基于权重的负载均衡算法,选择实例
                Instance instance = namingService.selectOneHealthyInstance(name);
                System.out.println("端口:"+instance.getPort()+"实例:"+instance);
                return new NacosServer(instance);
            } catch (NacosException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    
    1. 在启动类上启用
      在这里插入图片描述
    2. 创建一个子模块和goods一样 更改端口号
      在这里插入图片描述
      在这里插入图片描述
      启动所有服务
    3. 在nacos服务中心当中配置服务的权重
      在这里插入图片描述
      在这里插入图片描述

    Spring-Clould-Alibaba-集成Feign

    使用步骤

    1. 在客户端引入依赖 user

    在这里插入图片描述

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

    2. 在启动类上面加上注解:@EnableFeignClients

    在这里插入图片描述

    创建服务FeignClient

    1. 创建一个service文件夹,在该文件下创建一个接口,在接口加上添加@FeignClient()注解 参数就是你的微服务名字
      在这里插入图片描述
    @FeignClient(name="goods-provide")
    public interface FeiginClient {
    
        @RequestMapping("/getGoods")
        public Object getGoods();
    }
    
    
    1. 在控制器中注入,并调用
      在这里插入图片描述
     @Autowired
        private FeiginClient feiginClient;
     @RequestMapping("/getGoods")
        public ResponseResult getGoods() {
    
            return ResponseResult.success("操作成功",
                    feiginClient.getGoods());
        }
    

    启动测试
    在这里插入图片描述

    3.单个参数请求

    1.在goods中 编写带参数的请求

    在这里插入图片描述

     @RequestMapping("/getGoodsWithID/{id}")
        public ResponseResult getGoodsWithID(@PathVariable Integer id){
            return ResponseResult.success("id="+id);
        }
    
    1. 在FeiginClient编写接口 在这里插入图片描述
    @RequestMapping("/getGoodsWithID/{id}")
        public ResponseResult getGoodsWithID(@PathVariable Integer id);
    
    1. 在controller中调用
      在这里插入图片描述
     @RequestMapping("/getGoodsWithID/{id}")
        public ResponseResult getGoodsWithID(@PathVariable Integer id){
            return ResponseResult.success("操作成功",
                    feiginClient.getGoodsWithID(id));
        }
    

    启动测试
    在这里插入图片描述

    4. 多个参数请求

    1. 创建一个子工程 放实体类
      在这里插入图片描述
    2. 创建实体类Goods 实现序列化接口和get set方法
      在这里插入图片描述
    public class Goods implements Serializable {
        private String name;
        private String color;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }
    
    1. 在其他工程依赖实体包
      在这里插入图片描述
    <dependency>
                <groupId>com.dj</groupId>
                <artifactId>GoodsPojo</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
    
    1. 在goods工程的controller中创建带多个参数的方法
      在这里插入图片描述
    2. 在FeiginClient中创建接口 注意写上@SpringQueryMap注解,否则传值接收不到
      在这里插入图片描述
    3. 在controller中调用
      在这里插入图片描述
    @RequestMapping("/getGoodsWithObj")
        public ResponseResult getGoodsWithObj(Goods goods){
            return ResponseResult.success("操作成功",
                    feiginClient.getGoodsWithObj(goods));
        }
        
    

    启动测试
    在这里插入图片描述

  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/joker-dj/p/12700916.html
Copyright © 2011-2022 走看看