首页 > 其他分享 >在Spring Cloud中实现Feign声明式服务调用客户端

在Spring Cloud中实现Feign声明式服务调用客户端

时间:2023-12-23 23:35:51浏览次数:45  
标签:Feign 调用 Spring 接口 我们 public Cloud DcController


如果你学过Spring Cloud,你应该知道我们可以通过OpenFeign从一个服务中调用另一个服务,我们一般采用的方式就是定义一个Feign接口并使用@FeignClient注解来进行标注,feign会默认为我们创建的接口生成一个代理对象。

当我们在代码中调用Feign接口的方法的时候,实际上就是在调用我们Feign生成的代理对象的方法,代理对象会根据接口定义的方法信息,将我们的请求转发到相应的代码提供者。

然后Feign会根据接口方法的注解信息,进行构建HTTP请求,并将相关请求发送给服务提供者,目前Feign支持多种HTTP请求,包括但不限于GET,POST等,并且支持请求参数,请求头等的配置。

服务提供者接收到请求后,根据请求路径和参数等信息,执行相应的业务逻辑,并将相关结果返回给Feign客户单,至此,Feign客户端接收到服务提供者的响应后,将响应结果返回给调用方。

接下来,请跟着我的步骤进行完成,注意本案例,是在博主Spring Cloud系列中进行的,如果你想跟着一起来,不妨先看前几篇文章把框架搭建好。

首先我们启动相关服务,其中本案例将用到主要的三个服务如下:
EurekaApplication,EurekaClientApplication,FeignApplication。

在Spring Cloud中实现Feign声明式服务调用客户端_spring


启动服务之后,我们在Feign直接调用EurekaClientApplication中的接口,首先,我们就在启动类里边添加相关注解:

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignApplication
{
    public static void main( String[] args )
    {
        SpringApplication.run(FeignApplication.class);
    }
}

然后创建一个DcClient接口:

@FeignClient("eureka-client")
public interface DcClient {

    @GetMapping("/dc")
    String consumer();

}

那么我们应该在那里调用这个接口呢?

我们直接通过控制层进行调用:创建一个DcController控制类:

@RestController
public class DcController {

    @Autowired
    DcClient dcClient;

    @GetMapping("/consumer")
    public String dc() {
        return dcClient.consumer();
    }
}

然后重启FeignApplication。通过访问
localhost:2380/consumer
出现如下图所示信息,代表你成功在Feign服务中调用到EurekaClient模块中的DcController,让我们看看EurekaClient模块中的DcController:

@RestController
public class DcController {

    @Autowired
    DiscoveryClient discoveryClient;

    @GetMapping("/dc")
    public String dc() {
        String services = "Services: " + discoveryClient.getServices();
        System.out.println(services);
        return services;
    }
}

在Spring Cloud中实现Feign声明式服务调用客户端_spring cloud_02


我们发现启动的服务如上:

Services: [zuul-demo, hystrix-demo, ribbon-demo, eureka-client, feign-demo]

在Spring Cloud中实现Feign声明式服务调用客户端_spring cloud_03

来对照一下发现,我们启动的服务均在localhost:1000中可以见。我们可以同@FeignClient定义的接口来统一申明我们需要依赖的微服务接口,通过我们上述的方式进行,让我们可以在具体使用的时候,跟着调用本地方法一样的进行调用。


标签:Feign,调用,Spring,接口,我们,public,Cloud,DcController
From: https://blog.51cto.com/miaow/8947874

相关文章

  • Feign源码解析:初始化过程(二)
    背景上一篇介绍了Feign源码初始化的一部分,内容主要是,@EnableFeignClients、@FeignClient这些注解,都支持设置一些自定义的配置类:[email protected]@Beandefinitionforthepiecesthatmakeuptheclient,forinstance......
  • Swagger(一) Swagger/Springfox 入门简介
    转载自:https://blog.csdn.net/donglinjob/article/details/108550636 Swagger/Springfox入门简介一、Swagger 简介1前言接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经......
  • 将 Spring Boot WAR 部署到 Tomcat 服务器
    Servlet容器期望应用程序满足要部署的某些协定。对于Tomcat,合约是 ServletAPI3.0。为了让我们的应用程序满足这个契约,我们必须对源代码进行一些小的修改。 首先,我们需要打包一个WAR应用程序而不是JAR。为此,我们将使用以下内容更改 pom.xml:<packaging>war</packaging......
  • org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis
    Requestprocessingfailed;nestedexceptionisorg.mybatis.spring.MyBatisSystemException:nestedexceptionisorg.apache.ibatis.binding.BindingException:Parameter'keyWord'notfound.Availableparametersare[keyword,param1] 错误原因:我在mapper里加......
  • Spring Boot框架必知,满满干货!
    1、初识SpringBoot框架1.1SpringBoot框架定义SpringBoot并不是替代Spring框架的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具,同时SpringBoot还集成了大量常用的第三方库配置,本质上是基于Spring的Web应用程序开发框架。1.2SpringBoot框架的优点可快速构......
  • cloudflare,vercel and netlify的作用和区别
    Cloudflare,Vercel和Netlify都是为开发者提供的云计算服务,但它们的功能和特性有所不同。Cloudflare的主要使命是帮助构建更好的互联网。它是世界上最大的网络之一,为企业、非营利组织、博客作者和任何有互联网存在的人提供更快、更安全的网站和应用。Cloudflare的网络上有数百万......
  • SpringSecurity:自定义身份认证异常处理器不生效
    由于我配置了全局异常处理器,再配置身份认证异常处理器后,发现异常直接被全局异常处理器捕获了@RestControllerAdvice("com.gsy.wy")@Slf4jpublicclassGlobalException{@ExceptionHandler(Exception.class)publicResulthandlerException(Exceptione){l......
  • Java Spring Boot 集成 elasticsearch6.8.x
    在全文搜索领域,毫无疑问,当下elasticsearch应用广泛,其优势自不必说,凭借全文快速搜索,可以在短时内实现大数据量的查询。今天学习下在SpringBoot中集成elasticsearch开发,这里主要展示可以怎么用,至于开发人员向通过ElasticsearchORM封装,也可以参考下面的示例。环境:Sprin......
  • Spring MVC 源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • spring-jcl 模块源码分析
    目录简介源码分析总结简介spring-jcl是spring用于处理日志打印的模块,被spring-core所依赖:jcl全称是JakartaCommonsLogging,是apache提供的日志门面(功能同slf4j),日志门面利用设计模式中的门面模式提供统一的日志接口,实际的日志实现可以任意更换。不过jcl支持的日志实现有限,已......