Spring Cloud 中 OpenFeign的使用


前言

准备学习 Spring Cloud,在QQ阅读上按照书《Spring Cloud 微服务快速上手》来学习。
首先学习的内容就是 Web 服务客户端 通过OpenFeign 访问服务端(服务端已注册在 nacos 中)。

学习项目地址

一、启动nacos

nacos官网下载最新版本的nacos,然后解压到某个文件夹,比如

D:\Program Files\nacos

然后用cmd打开其下的bin文件夹,执行

startup.cmd -m standalone

这就在本机启动了单机版 nacos,可以供调试使用。
可以通过 http://localhost:8848/nacos 尝试访问Nacos的管理页面(管理页面默认用户名和密码都是nacos)。

在这里插入图片描述
我们可以看到服务列表是空的,这个时候还没有任何服务注册到这个nacos的注册中心。

二、建立项目

按照书上写的,建立三个 spring web 项目,分别为 passager-api, pay-service, order-service。
passager-api作为客户端,也就是消费方,将调用pay-service提供的服务,·而order-service,这里其实没有被用到。

1.passager-api

passager-api 的 pom.xm要引入:
spring-cloud-starter-alibaba-nacos-discovery
spring-cloud-starter-openfeign
spring-cloud-starter-loadbalancer

要注意的是:
dependencyManagement中的
spring-cloud-dependencies版本,要和spring boot的版本兼容
(通过 https://start.spring.io/actuator/info 可以查到哪些版本兼容)
这个项目spring boot 用的3.3.3,spring cloud 选择的 2023.0.3,可以兼容

spring-cloud-alibaba-dependencies版本,要和spring-cloud-dependencies版本兼容,这里 spring-cloud-alibaba-dependencies 用的 2023.0.1.0版本。

在passager-api的启动类上注解 @EnableFeignClients,使得项目支持Feign。

在application.yml中配置好nacos

spring:
  application:
    name: passager-api
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 9001
logging:
  level:
    root: TRACE

定义一个service接口

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(value = "pay-service")
public interface IFeignClient {
    @RequestMapping(value = "/provider/test", method = RequestMethod.GET)
    String callPay();
}

这个接口的 callPay() 方法将访问pay-service 的 provider/test 接口。

定义controller 中的方法

test()方法将调用callPay()方法,也就会调用pay-service中暴露的接口

import org.example.passagerapi.service.IFeignClient;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/webclient")
public class WebClientController {
    @Autowired
    private IFeignClient iFeignClient;
    @GetMapping("/test")
    public String test() {
        return iFeignClient.callPay();
    }
}

2.pay-service

pay-service 的pom.xml 要引入
spring-cloud-starter-alibaba-nacos-discovery

类似于passager-api ,在 application.yml 中配置好 nacos,以便将项目注册到nacos

这就是一个普通的 spring web 项目,通过controller对外提供服务

三、启动项目

分别启动 passager-api 和 pay-service 项目,它们将会出现在nacos 服务列表中
在这里插入图片描述

然后我们通过 http://localhost:9001/webclient/test 访问 passager-api 的controller方法,就会调用到 pay-service 的 /provider/test 接口

关键说明

@FeignClient(value = “pay-service”)
是使得service 访问名为 pay-service 的服务,
loadbalancer会将对 http://pay-service/provider/test 的访问 转化为访问 http://192.168.31.136:9003/provider/test

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个为开发者提供了快速构建分布式系统的工具集,其非常重要的一部分就是OpenFeignOpenFeign是一个声明式、模板化的HTTP客户端,它可以让开发者更加方便的调用HTTP接口。下面我们来详细了解一下Spring Cloud整合OpenFeign使用方式。 首先,我们需要在pom.xml文件添加依赖,如下所示: ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>{版本号}</version> </dependency> ``` 然后,我们需要在启动类上添加@EnableFeignClients注解,表示开启Feign客户端自动配置。同时,我们还需要通过@FeignClient注解来定义接口。例如: ``` @FeignClient(name = "user-service") public interface UserFeignClient { @GetMapping("/user/findById") User findById(@RequestParam("id") Long id); } ``` 在上面的代码,@FeignClient注解的name属性表示调用的服务名,而接口的findById方法就是定义的远程调用的接口。其,@RequestParam注解表示使用@RequestParam方式传参。 最后,我们在业务代码使用定义的接口即可。例如: ``` @RestController public class UserController { @Autowired private UserFeignClient userFeignClient; @GetMapping("/findUser") public User findUser(Long id) { return userFeignClient.findById(id); } } ``` 通过以上步骤,我们就可以方便地使用OpenFeign来调用HTTP接口,实现微服务之间的远程调用。整合OpenFeign有很多细节需要注意,例如如何处理调用异常、如何配置重试等等。但总体来说,Spring Cloud整合OpenFeign使用起来非常简单,是我们构建分布式系统的重要利器之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值