
默认使用是轮询策略

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

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

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

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






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


@FeignClient(name="goods-provide")
public interface FeiginClient {
    @RequestMapping("/getGoods")
    public Object getGoods();
}

 @Autowired
    private FeiginClient feiginClient;
 @RequestMapping("/getGoods")
    public ResponseResult getGoods() {
        return ResponseResult.success("操作成功",
                feiginClient.getGoods());
    }
启动测试

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

 @RequestMapping("/getGoodsWithID/{id}")
    public ResponseResult getGoodsWithID(@PathVariable Integer id){
        return ResponseResult.success("id="+id);
    }

@RequestMapping("/getGoodsWithID/{id}")
    public ResponseResult getGoodsWithID(@PathVariable Integer id);

 @RequestMapping("/getGoodsWithID/{id}")
    public ResponseResult getGoodsWithID(@PathVariable Integer id){
        return ResponseResult.success("操作成功",
                feiginClient.getGoodsWithID(id));
    }
启动测试



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

<dependency>
            <groupId>com.dj</groupId>
            <artifactId>GoodsPojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>



@RequestMapping("/getGoodsWithObj")
    public ResponseResult getGoodsWithObj(Goods goods){
        return ResponseResult.success("操作成功",
                feiginClient.getGoodsWithObj(goods));
    }
    
启动测试

Spring-Clould-Alibaba-集成Ribbon&Feign
原文:https://www.cnblogs.com/joker-dj/p/12700916.html