• SpringCloud Alibaba系列 Ribbon Feign(二)


    目录

    Ribbon支持的负载均衡策略

    SpringCloud配置指定的负载均衡策略

    SpringCloud 集成 openfeign

    feign的调用原理


    Ribbon支持的负载均衡策略

    策略类负载策略描述
    RoundRobinRule轮询策略按照顺序选择server(默认)
    RandomRule随机策略随机选择server
    RetryRule重试策略当选择server不成功,短期内尝试选择一个可用的server
    AvailabilityFilteringRule可用过滤策略过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)
    WeightedResponseTimeRule响应时间加权重策略根据server的响应时间分配权重,以响应时间作为权重,响应时间越短的服务器被选中的概率越大,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间
    ZoneAvoidanceRule区域权重策略综合判断server所在区域的性能,和server的可用性,轮询选择server

    SpringCloud配置指定的负载均衡策略

    1. ### 服务提供者
    2. order-service:
    3. ribbon:
    4. # 指定负载均衡的全限定类名
    5. NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

    SpringCloud 集成 openfeign

    官网:Spring Cloud OpenFeign

    1:子服务中添加依赖

    1. <dependency>
    2. <groupId>org.springframework.cloudgroupId>
    3. <artifactId>spring-cloud-starter-openfeignartifactId>
    4. dependency>

    2:启动类添加注解

    @EnableFeignClients

    3:在服务调用方添加一个接口

    1. // name:指定服务提供方名称
    2. @FeignClient(name="order-service")
    1. @FeignClient(name = "order-service")
    2. public interface OrderService {
    3. @GetMapping("/order/one") // 这里写被调用方的接口路径
    4. OrderDO getOne(@RequestParam("orderId") Long orderId); // 变量参数要带 @RequestParam
    5. @PostMapping("/order/save") // post 请求的方式
    6. int save(@RequestBody OrderDO orderDO); // 对象参数要带 @RequestBody
    7. }

    4:feign调用接口

    1. @Service
    2. public class UserServiceImpl implements UserService {
    3. @Autowired
    4. private OrderService orderService;
    5. @Override
    6. public OrderDO getOrderDetail(Long orderId) {
    7. return orderService.getOne(orderId);
    8. }
    9. @Override
    10. public Integer save(OrderDO orderDO) {
    11. return orderService.save(orderDO);
    12. }
    13. }

    feign的调用原理

    feign作用

    • 声明式Http Client相对于编程式Http Client代码逻辑更加简洁,不需要处理复杂的编码请求和响应,只需要像调用本地方法即可,提高编码效率
    • 集中管理Http请求方法,代码边界更加清晰
    • 更好的集成负载均衡、熔断降级等功能

    feign使用了两个注解@EnableFeignClients @FeignClient,EnableFeignClients开启feign,在spring装载的时候载入有FeignClient注解的接口成spring的BeanDefinition,spring管理这些bean,使用的时候@Autowired就可以。上面说了feign是简化我们对httpClient的调用,我们使用一行注解就可以完成httpClient的操作了,可以想到那些httpClient操作肯定是通过SpringAop动态代理的方式做了。更多源码分析请阅读:Feign底层原理分析

    * 注意:不在同一命名空间下的服务进行feign调用时,要确保nacos账号有不同命名空间的操作权限,不然feign会找不到服务,报错Load balancer does not have available server for client: xxx

  • 相关阅读:
    servlet的简单使用总结
    docker 开启 nginx 容器
    Java SE 12 新增特性
    Python Pandas数据处理作图——霍尔效应
    记录部署Datax、Datax-web 过程碰到的问题
    如何干涉MySQL优化器使用hash join
    Hough Transform Tutorial
    【2022牛客多校4】A-Task Computing (数学,dp)
    Qemu kvm_qemu详细教程
    使用原子子表创建可重用的子组件
  • 原文地址:https://blog.csdn.net/a1053765496/article/details/127351181