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));
        }
        
    

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

  • 相关阅读:
    JetBrains Rider 在 Mac 环境下将 cs 文件生成 exe
    Unity3d 控制物体移动、旋转、缩放
    Unity3d 脚本使用规则
    Unity3D 脚本模板修改方法
    Intelli IDEA 设置项目编码(Mac)
    搭建LayaBox的生产环境,并helloWorld
    unity Lighting
    流畅度测试
    Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]
    Unity GUI(uGUI)使用心得与性能总结
  • 原文地址:https://www.cnblogs.com/joker-dj/p/12700916.html
Copyright © 2011-2022 走看看