(三)SpringCloud实战之openfeign服务调用

feign是依赖注册中心调用的其他服务。
如果A服务调用B服务,A就是在注册中心找B服务,找到了才知道地址,才能调用接口。(也可以不用注册中心访问到B服务,需要在@feignclient的注解后面配置url,下面第四大点详细讲)

一、项目结构

配置中心
注册中心
服务A:学生服务
服务B:课程成绩服务
在这里插入图片描述
下面我们要实现:
服务A:学生服务 调用 服务B:课程服务的接口

二、引入依赖

A服务是调用端,需要引入依赖
B服务是被调用端,可以不用引依赖

在引入依赖的时候发现,两个依赖:spring-cloud-starter-feign和spring-cloud-starter-openfeign,这里推荐使用openfeign。
下面是他俩的区别

openfeign 和 feign

openfeign 是 spring cloud 在 feign 的基础上支持 spring mvc注解 ,如 @RequestMapping 等等,OpenFeign 的@FeignClient 可以解析Spring MVC 的 @RequestMapping注解下的接口,并通过动态代理的方式生产实现类 ,实现类中做负载均衡并且 低耦合调用其他服务。
在这里插入图片描述
在这里插入图片描述
推荐使用openfeign

引入依赖

<!--feign客户端(调用端)-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>

这里没有写版本,是因为父工程引入了spring-cloud-dependencies依赖声明

三、调用端(A服务)写调用接口

3.1、编写远程调用接口:

接口FCourseService(习惯性大写F开头,表示这是Feign远程调用接口)

在这里插入图片描述

3.2、启动程序加注解

注解:@EnableFeignClients
在这里插入图片描述

3.3、使用远程调用接口

在需要使用的地方:
1、@Autowired注入FCourseService
2、使用fCourseService接口方法
在这里插入图片描述

到这里,远程调用环境全部准备好了。
启动A服务、B服务、注册中心、配置中心。
打开浏览器:http://localhost:8011/student/selectAllCourse
(我的A服务(学生服务)是运行在8011端口)
得到结果:
在这里插入图片描述
feign远程调用成功!!!!

四、扩展(不使用eureka注册中心来实现feign远程调用)

4.1、如果没有注册中心:

报错显示:Load balancer does not have available server for client: course-service(找不到服务)
在这里插入图片描述

4.3、实现

只需要在远程调用接口的@FeignClient后面的括号里面加上属性url就可以了:
@FeignClient(name = “course-service”,url = “http://localhost:8011/”)

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Cloud中使用OpenFeign调用别的服务中的方法非常容易,只需要按照以下步骤进行操作: 1.添加依赖 首先在pom.xml文件中添加OpenFeign依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2.创建Feign客户端 在Java代码中创建一个Feign客户端,用来调用另一个服务中的方法。例如,要调用一个名为"order-service"的服务中的方法,可以创建一个名为"OrderServiceClient"的Feign客户端: ```java import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient(name = "order-service") public interface OrderServiceClient { @GetMapping("/orders") List<Order> getOrders(); } ``` 在上面的代码中,我们使用@FeignClient注解将OrderServiceClient注册为一个Feign客户端,并设置其名称为"order-service",这个名称与我们要调用服务名称相同。紧接着,我们定义了一个名为"getOrders()"的方法,用来调用"order-service"服务中的"/orders"接口,并返回"Order"类型的列表。 3.使用Feign客户端 最后,在我们的代码中使用OrderServiceClient来调用"order-service"服务中的方法: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private OrderServiceClient orderServiceClient; @GetMapping("/my-orders") public List<Order> getMyOrders() { return orderServiceClient.getOrders(); } } ``` 在上面的代码中,我们使用@Autowired注解将OrderServiceClient注入到MyController中。然后,我们定义了一个名为"getMyOrders()"的方法,用来调用OrderServiceClient中的"getOrders()"方法,并返回"Order"类型的列表。 这样,我们就可以使用OpenFeign轻松地调用别的服务中的方法了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值