前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring-Clould-Alibaba-集成Ribbon&Feign

Spring-Clould-Alibaba-集成Ribbon&Feign

作者头像
JokerDJ
发布2023-11-27 13:35:49
1280
发布2023-11-27 13:35:49
举报
文章被收录于专栏:JokerDJJokerDJ
Spring-Clould-Alibaba-集成Ribbon&Feign

1. RestTemplate上添加注解@LoadBalanced

在这里插入图片描述
在这里插入图片描述

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

默认使用是轮询策略

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
@RequestMapping("/getGoods")
    public ResponseResult getGoods() {
        String url="http://goods-provide/getGoods";
        return ResponseResult.success("操作成功",
                restTemplate.getForObject(url,Object.class));
    }

3. 自定义负载均衡策略

在启动类上添加

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
@Bean
    public IRule Irule(){
        return new RandomRule();//随机负载均衡
    }

4. 配置懒加载

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
# 饥饿加载(懒加载) 已启动就获取服务
ribbon:
  eager-load:
    enabled: true
    clients: goods-provide #多个服务使用逗号隔开

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

  1. 自定义权重算法 创建一个类,继承AbstractLoadBalancerRule类 实现如下方法
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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. 在启动类上启用
在这里插入图片描述
在这里插入图片描述
  1. 创建一个子模块和goods一样 更改端口号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

启动所有服务

  1. 在nacos服务中心当中配置服务的权重
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Spring-Clould-Alibaba-集成Feign

使用步骤

1. 在客户端引入依赖 user
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. 在启动类上面加上注解:@EnableFeignClients
在这里插入图片描述
在这里插入图片描述
创建服务FeignClient
  1. 创建一个service文件夹,在该文件下创建一个接口,在接口加上添加@FeignClient()注解 参数就是你的微服务名字
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
@FeignClient(name="goods-provide")
public interface FeiginClient {

    @RequestMapping("/getGoods")
    public Object getGoods();
}
  1. 在控制器中注入,并调用
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 @Autowired
    private FeiginClient feiginClient;
 @RequestMapping("/getGoods")
    public ResponseResult getGoods() {

        return ResponseResult.success("操作成功",
                feiginClient.getGoods());
    }

启动测试

在这里插入图片描述
在这里插入图片描述
3.单个参数请求

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

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

启动测试

在这里插入图片描述
在这里插入图片描述
4. 多个参数请求
  1. 创建一个子工程 放实体类
在这里插入图片描述
在这里插入图片描述
  1. 创建实体类Goods 实现序列化接口和get set方法
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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. 在其他工程依赖实体包
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
<dependency>
            <groupId>com.dj</groupId>
            <artifactId>GoodsPojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
  1. 在goods工程的controller中创建带多个参数的方法
在这里插入图片描述
在这里插入图片描述
  1. 在FeiginClient中创建接口 注意写上@SpringQueryMap注解,否则传值接收不到
在这里插入图片描述
在这里插入图片描述
  1. 在controller中调用
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
@RequestMapping("/getGoodsWithObj")
    public ResponseResult getGoodsWithObj(Goods goods){
        return ResponseResult.success("操作成功",
                feiginClient.getGoodsWithObj(goods));
    }

启动测试

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring-Clould-Alibaba-集成Ribbon&Feign
  • 1. RestTemplate上添加注解@LoadBalanced
  • 2. 在调用时, 就可以使用服务名称来进行调用 , 和之前的使用Eureka方式 是一样的
  • 3. 自定义负载均衡策略
  • 4. 配置懒加载
  • 5. Nacos集成Ribbon,支持权重的负载均衡算法
  • Spring-Clould-Alibaba-集成Feign
    • 使用步骤
      • 1. 在客户端引入依赖 user
      • 2. 在启动类上面加上注解:@EnableFeignClients
      • 创建服务FeignClient
      • 3.单个参数请求
      • 4. 多个参数请求
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档