10分钟入门Nacos+Feign服务间接口调用

女爷i 2023-01-19 04:37 31阅读 0赞

文章目录

      • nacos-order-center
      • nacos-user-center

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。

下面通过一个简单的示例延时使用Nacos+Feign完成服务间的接口调用
【基本描述】用户调用用户服务,用户服务通过Feign调用订单服务

在这里插入图片描述

nacos-order-center

订单服务需要的依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  8. <version>2.2.3.RELEASE</version>
  9. </dependency>
  10. <dependency>
  11. <groupId>com.alibaba.cloud</groupId>
  12. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  13. <version>2.2.3.RELEASE</version>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.cloud</groupId>
  17. <artifactId>spring-cloud-starter-openfeign</artifactId>
  18. <version>2.2.5.RELEASE</version>
  19. </dependency>

bootstrap.yaml设置Nacos配置

  1. spring:
  2. application:
  3. name: nacos-order-center
  4. profiles:
  5. active: dev
  6. cloud:
  7. nacos:
  8. config:
  9. # 配置文件的环境
  10. group: ${spring.profiles.active}
  11. # 配置文件的格式
  12. file-extension: yaml
  13. # 配置中心的地址
  14. server-addr: 192.168.208.31:8848
  15. # 配置文件prefix
  16. prefix: ${spring.application.name}
  17. discovery:
  18. server-addr: 192.168.208.31:8848
  19. group: ${spring.profiles.active}

启动类启动服务发现以及启用Feign服务

  1. @SpringBootApplication
  2. @RestController
  3. @EnableFeignClients
  4. public class OrderCenterApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(OrderCenterApplication.class, args);
  7. }
  8. }

order服务作为被调用方,提供一个Restful接口,该接口既可以直接通过服务IP地址访问也可以通过Feign访问

  1. @RestController
  2. @RequestMapping("/order")
  3. public class OrderController {
  4. @GetMapping("/name")
  5. public String user(String name){
  6. return name+"=>查询用户订单";
  7. }
  8. }

启动项目,查看Nacos服务列表,此时已经注册了订单服务

在这里插入图片描述

nacos-user-center

用户服务添加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>com.alibaba.cloud</groupId>
  7. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  8. <version>2.2.3.RELEASE</version>
  9. </dependency>
  10. <dependency>
  11. <groupId>com.alibaba.cloud</groupId>
  12. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  13. <version>2.2.3.RELEASE</version>
  14. </dependency>
  15. <dependency>
  16. <groupId>org.springframework.cloud</groupId>
  17. <artifactId>spring-cloud-starter-openfeign</artifactId>
  18. <version>2.2.5.RELEASE</version>
  19. </dependency>

配置用户服务启动类

  1. @SpringBootApplication
  2. @RestController
  3. @EnableFeignClients
  4. public class UserCenterApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(UserCenterApplication.class, args);
  7. }
  8. }

设置@FeignClient以支持HTTP访问其他服务接口
注意,GetMapping需要指明参数@RequestParam,因为FeignClient最后是用HttpURLConnectiion发起的网络连接,在发起的过程中,Connection会判断其自身的body是否为空,如果不为空,则将 GET Method 转换为 POST Method。
@FeignClient:指定服务名称,其他的注解都是兼容SpringMVC

  1. @FeignClient("nacos-order-center")
  2. @RequestMapping("/order")
  3. public interface OrderFeignClient {
  4. @GetMapping("/name")
  5. String findOrderByUser(@RequestParam("name") String name);
  6. }

提供一个对外的接口

  1. @RestController
  2. @RequestMapping("/user")
  3. public class UserController {
  4. @Autowired
  5. OrderFeignClient orderFeignClient;
  6. @GetMapping("/hello")
  7. public String user(String name){
  8. return orderFeignClient.findOrderByUser(name);
  9. }
  10. }

启动用户服务,此时已经注册用户服务
在这里插入图片描述

测试,调用用户服务提供的接口,可以看到已经在用户服务中通过Feign成功调用了订单服务
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,31人围观)

还没有评论,来说两句吧...

相关阅读