第五章 SpringCloud Alibaba 实现Feign服务调用的负载均衡

什么是Feign

Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务
一样简单, 只需要创建一个接口并添加一个注解即可。
Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负
载均衡的效果。

Feign的使用

在订单服务里面加入Fegin的依赖

<!--fegin组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

在主类上添加Fegin的注解

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients//开启Fegin
public class OrderApplication {
   
    public static void main(String[] args) {
   
        SpringApplication.run(OrderApplication.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
   
        return new RestTemplate();
    }
  }

订单服务创建一个service, 并使用Fegin实现微服务调用

@FeignClient("service-product")//声明调用的提供者的name
public interface ProductService {
   
    //指定调用提供者的哪个方法
    //@FeignClient+@GetMapping 就是一个完整的请求路径 http://serviceproduct/product/{pid}
    @GetMapping(value = "/product/{pid}")
    Product findByPid(@PathVariable("pid") Integer pid);
}

修改controller代码,并启动验证

@RestController
@Slf4j
public class OrderController {
   
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private OrderService orderService;
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private ProductService productService;
    //准备买1件商品
    @GetMapping("/order/prod/{pid}")
    public Order order(@PathVariable("pid") Integer pid) {
   
        log.info(">>客户下单,这时候要调用商品微服务查询商品信息");
        //从nacos中获取服务地址
        //直接使用微服务名字, 从nacos中获取服务地址
        //通过fegin调用商品微服务
        Product product = productService.findByPid(pid);

        log.info(">>商品信息,查询结果:" + JSON.toJSONString(product));
        Order order = new Order();
        order.setUid(1);
        order.setUsername("测试用户");
        order.setPid(product.getPid());
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(1);
        orderService.save(order);
        return order;
    }
}

重启order微服务,查看效果

http://localhost:8091/order/prod/1

商品服务已经访问到信息
在这里插入图片描述
订单服务已经获取信息
在这里插入图片描述

  • 第六章 SpringCloud Alibaba 实现Sentinel–服务容错

相关推荐

  1. 001 springCloudAlibaba 负载均衡

    2023-12-11 11:36:02       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-11 11:36:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-11 11:36:02       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-11 11:36:02       82 阅读
  4. Python语言-面向对象

    2023-12-11 11:36:02       91 阅读

热门阅读

  1. mysql的行锁具体是怎么工作的

    2023-12-11 11:36:02       64 阅读
  2. leetcode周赛375 - 12 - 10

    2023-12-11 11:36:02       63 阅读
  3. redis底层数据结构之ziplist实现

    2023-12-11 11:36:02       60 阅读
  4. 如何利用jQuery来向一个元素中添加和移除CSS类?

    2023-12-11 11:36:02       60 阅读
  5. JWT的原理

    2023-12-11 11:36:02       49 阅读
  6. 尼科彻斯定理

    2023-12-11 11:36:02       59 阅读
  7. 工业相机与镜头选型方法(含实例)

    2023-12-11 11:36:02       56 阅读
  8. Peter算法小课堂—差分数组

    2023-12-11 11:36:02       61 阅读
  9. 使用python统计字符串中字母个数的函数程序设计

    2023-12-11 11:36:02       68 阅读
  10. 7.1 C++11指针空值—nullptr

    2023-12-11 11:36:02       54 阅读
  11. synchronized和volatile的区别

    2023-12-11 11:36:02       52 阅读
  12. 基于AidLux的工业视觉少样本缺陷检测实战

    2023-12-11 11:36:02       67 阅读