使用feign实现客户端----调用服务端(服务间的调用)

一.什么是feign

fegin旨在简化服务间的调用实现。实现了开发人员不在关注服务间的http请求的编写

在feign没有之前我们如果实现服务间的调用会使用RestTemplate去实现服务间的调用。但是在实际开发中,有偶遇对于服务依赖的调用可能不止一处,往往一个借口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。

所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务借口的定义。在Feign的实现下,我们只需创建一个接口并使用注解的方式来配置它,即可完成对服务提供方的接口绑定,并且feign集成了ribbon和restTemplate简化了使用Spring cloud Ribbon,自动封装服务调用客户端的开发量。并且实现了服务间的负载均衡

二.feign的使用

客户端
1.客户端引入feign相关的maven依赖包

<dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-core</artifactId>
            <version>10.10.1</version>
        </dependency>

        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-jackson</artifactId>
            <version>10.4.0</version>
        </dependency>

2.在application.properties文件中配置调用服务端的路径前缀(我的是,调用本地的其它服务)

aop.feignCenterClient.url=http://localhost:8083

在这里插入图片描述
3.新建FeignCenterClient服务端调用接口

/**
 * @belongProject:hibernate
 * @belongPackage:com.tject.restclient
 * @author:xujirong
 * @dscription:调用服务端接口
 * @date:2022-08-07 21:36
 * @version:1.0
 */
public interface FeignCenterClient {

    @Headers({"Content-Type:application/json;charset=UTF-8","Accept:application/json","Accept-Encoding:"})
    @RequestLine("POST /2021_BYSJ/admin/selectByAdmin")
    public JSONObject selectByAdmin(JSONObject requestJson);


    @Headers({"Content-Type:application/json;charset=UTF-8","Accept:application/json","Accept-Encoding:"})
    @RequestLine("POST /activity/rule/requestSwagger")
    public JSONObject activityByTest(JSONObject requestJson);
}

4.创建FeignConfig配置文件,创建bean


/**
 * @belongProject:hibernate
 * @belongPackage:com.tject.config
 * @author:xujirong
 * @dscription:Feign客户端配置
 * @date:2022-08-07 21:43
 * @version:1.0
 */
@Configuration
public class FeignConfig {

    @Bean
    public FeignCenterClient feignCenterClient(@Value("${aop.feignCenterClient.url}")String url){
        FeignCenterClient feignCenterClient= Feign.builder()
                .encoder(new JacksonEncoder())
                .decoder(new JacksonDecoder())
                .options(new Options(35000, 35000))
                .retryer(Retryer.NEVER_RETRY)
                .target(FeignCenterClient.class, url);
        return feignCenterClient;
    }

}

使用feign实现客户端----调用服务端(服务间的调用)_第1张图片

服务端
请求报文,要加一个@RequestBody注解

@PostMapping("/selectByAdmin")
    @ResponseBody
    public JSONObject selectByAdmin(@RequestBody JSONObject requestJson) {
        System.out.println("requestJson = " + requestJson);
        PageInfo<Admin> adminPageInfo = adminService.listByName("", 1, 4);
        return requestJson;
    }

使用feign实现客户端----调用服务端(服务间的调用)_第2张图片

你可能感兴趣的:(Java开发,Spring的学习,java,开发语言)