基于 Fegin 实现服务调用|学习笔记

简介: 快速学习基于 Fegin 实现服务调用

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段基于Fegin实现服务调用】学习笔记与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/684/detail/11867


基于Fegin实现服务调用

 

内容介绍:

一、 优化 RestTemplate

二、 Fegin 实现负载均衡

 

一、优化 RestTemplate

Product product =

RestTemplate.getForobject(url:http://localhost:/product/” +pid, Product.class);

此代码是我们进行微服务商品调用的代码,目前我们使用的是 RestTemplate 完成的服务调用,但这种方式其实有一定问题。

第一个问题:现在我们的参数是通过 URI 拼接的,这种写法在代码可读性是不良好的;

第二个问题:在代码风格上也不一致,我们在调用本地的服务时直接使用的是 @Autowired 注入的 service,但在调用远程服务时却用的是 RestTemplate ,造成编程风格不统一。

接下来我们通过优化将这两个问题解决掉。我们需要加入一个新的组件 Feign 。

Feign 是 Spring Cloud 提供的一个声明式的伪 Http 客户端,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。

Nacos 很好的兼容了Fegin ,Fegin 默认集成了Ribbon ,所以在Nacos下使用 Fegin 默认就实现了负载均衡的效果。

Fegin的使用

1、引入Fegin的依赖

2、在主类上添加 Fegin 的注解

3、创建一个 service ,并使 Fegin 实现服务调用。

4修改 controller 代码,并启动验证。


二、Fegin 实现负载均衡

1、引入依赖

第一步在 pom.xml 中引入 Fegin 的依赖,输入  回车 ,在 之后输入 openfegin 回车,版本不用写将其删掉并导入。

2、添加注解

第二步来到主类上添加一个注解叫 @EnableFeginClients //开启 fegin 的客户端。

3、修改代码

第三步打开 OrderController,不再使用Product product =

RestTemplate.getForobject(url:http://localhost:/product/” +pid, Product.class);

这个代码,而要将其改为

@Autowired

Private OrderService orderservice;这种形式,此时我们需要提供一个 OrderService 的接口,下面进行创建:Product product =

RestTemplate.getForobject(url:http://localhost:/product/” +pid, Product.class);

下方的作用是根据一个 pid 查询商品,所以我们最好加入一个商品的服务接口。

new 一个ProductService 将其改成接口,我们需要操作的就是将Product product =

RestTemplate.getForobject(url:http://localhost:/product/” +pid, Product.class);

替换掉,放在 ProductService 内,它的主要作用就是发送一个 ur ,然后获取返回的类型。

Fegin 为我们提供了两个注解以实现此功能。

第一个为 @FeginClient ,我们可以在内指定 value 属性,它指定的就是 service-product ,将其输入并写上 //value 用于指定调用 nacos 下哪个微服务,这个值就是在 nacos 中的微服务名称。然后学习如何执行操作 /product/” +pid, 需要我们声明一个方法,在下方输入 public Product findByPid(Integer pid); 既然为接口,那么前方的 Product 可以省略。

接着在上方再加一个代码为 @RequestMapping 的注解,并将 /product/” +pid, 代入其中。

在 public ProductfindByPid(Integer pid);

中加入 PathVariable ,在上方输入 //指定请求的 URI部分。FeignClient 的 value + RequestMapping 的value 值其实就是完整的请求路径,也就是”http://service-product/product/” + pid .

到目前为止我们已经完成了 Fegin 的 Service 接口的编选,然后将上边的代码删掉。同调用本地接口相同,输入

@Autowired

Private ProductService productService;

然后就可以调用使用了,为了保留一个完整的代码,还是将其复制一份并将 ribbon 改为 fegin ,接着将

Product product =

RestTemplate.getForobject(url:http://service-product/” +pid, Product.class); 改为上边注入的 productService 即可,即:

Product product = productService .findByPid(pid);

到这里就把 fegin 改完了。

重新启动 OrderApplication 做一个测试,等待启动完毕进行一次访问,对网址进行刷新就可发现访问成功。

相关文章
|
5天前
|
JSON Dubbo Java
Feign远程调用
Feign远程调用
7 1
Feign远程调用
|
21天前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
51 1
|
3月前
|
前端开发 Java API
SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate
SpringCloud跨微服务的远程调用,如何发起网络请求,RestTemplate
86 2
|
3月前
|
Java 数据库 微服务
使用OpenFeign进行服务调用
本文档介绍如何在微服务架构中使用Spring Cloud的OpenFeign进行服务间的远程调用。首先,需在项目中引入OpenFeign及其负载均衡器依赖。接着,通过`@EnableFeignClients`启用Feign客户端功能,并定义客户端接口以声明远程服务调用逻辑。为确保启动类能正确扫描到这些接口,需指定`basePackages`属性。最后,演示了如何在购物车服务中利用Feign客户端接口调用商品服务,以实现跨服务的数据整合和查询。Feign通过动态代理机制简化了HTTP请求的发起过程,使服务间交互更为直观和便捷。
106 0
|
6月前
|
存储 JSON 负载均衡
基于OpenFeign的服务调用
基于OpenFeign的服务调用
61 2
SpringCloud-Feign-文件服务调用
SpringCloud-Feign-文件服务调用
66 0
|
6月前
|
负载均衡 Java 网络架构
使用OpenFeign实现服务远程调用
当微服务架构日益普及,服务之间的远程调用变得至关重要。在这一背景下,OpenFeign作为一个强大的HTTP客户端框架简化了服务之间的远程通信。本文旨在介绍如何运用OpenFeign实现服务远程调用。
236 0
|
6月前
|
负载均衡 Java 应用服务中间件
springcloud3-服务到服务调用ribbon及openfeign
springcloud3-服务到服务调用ribbon及openfeign
76 0
|
12月前
|
Nacos
openfeign远程调用
openfeign远程调用
75 0
|
Java Nacos Sentinel
初识SpringCloud以及使用RestTemplate进行服务调用:服务调用初体验
初识SpringCloud以及使用RestTemplate进行服务调用:服务调用初体验
104 0
下一篇
无影云桌面