springcloud使用openfeign进行远程调用

OpenFeign是一款基于Netflix Feign开发的声明式HTTP客户端工具。它可以帮助我们方便的与远程HTTP服务进行通信,让我们在使用Restful服务时更加简单和快速。它提供了可靠的、可扩展的、易于维护的HTTP请求和响应的处理方式,是一个优秀的REST API客户端。一些主要特性如下:

  1. 声明式API:以接口方式定义RESTful请求,不再需要手动构建HTTP请求对象。

  2. Spring Cloud集成:通过Spring Cloud可快速地与服务注册中心和配置中心进行集成。

  3. 充分利用HTTP:与HTTP客户端(如:OkHttp、HttpClient)相比,OpenFeign提供了更丰富的HTTP功能。

  4. 快速开始:使用OpenFeign开发REST API客户端,可以更快速地实现测试、开发、部署。

  5. 支持多种序列化方式:可以通过配置实现多种JSON序列化方式。

环境准备

插件 版本
jdk 21
springboot

3.0.11

springcloud

2022.0.4

springcloudalibaba

2022.0.0.0

nacos 2.2.3(稳定版)

代码编写 

 pom



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        3.0.11
         
    
    com.example
    platform
    0.0.1-SNAPSHOT
    platform
    platform
    
        21
        2022.0.0
        2022.0.0.0
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            3.0.2
        




        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.3.2
        
        
            com.mysql
            mysql-connector-j
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter-test
            3.0.2
            test
        
        
            org.projectlombok
            lombok
            edge-SNAPSHOT
        
        
            javax.validation
            validation-api
            2.0.1.Final
        
        
            org.apache.commons
            commons-lang3
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
        
        
            com.alibaba
            fastjson
            2.0.41
        
        
            com.auth0
            java-jwt
            4.4.0
        
        
            org.springframework.cloud
            spring-cloud-loadbalancer
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                ${spring-cloud-alibaba.version}
                pom
                import
            
        
    

    
        
            projectlombok.org
            https://projectlombok.org/edge-releases
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


配置类

@Configuration
public class FeignConfig {
 
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

rpc类

@FeignClient(url = "https://api.weixin.qq.com", name = "wx")
public interface WxService {
 
    @GetMapping("/sns/jscode2session")
    String jscode2session(@RequestParam String appid, @RequestParam String secret, @RequestParam String js_code, @RequestParam String grant_type);
 
    @PostMapping("/wxa/business/getuserphonenumber")
    WxResponse getuserphonenumber(@RequestBody WxRequest wxRequest, @RequestParam String access_token);
 
    @GetMapping("/cgi-bin/token")
    TokenResponse token(@RequestParam String grant_type, @RequestParam String appid, @RequestParam String secret);
}

dto类

public record TokenResponse(String access_token, Integer expires_in) {
}
public record WxResponse(
        String openid,
        String session_key,
        String unionid,
        int errcode,
        String errmsg
) {
 
}

启动类

@SpringBootApplication
// 这里必须有
@EnableFeignClients
public class PlatformApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(PlatformApplication.class, args);
    }
 
}

测试类 

@Test
void testCode() {
 
    TokenResponse token = wxService.token("client_credential", "wxxxxxxxxx", "xxxxxxxxxx");
    System.out.println(token);
    var wxResponse = wxService.getuserphonenumber(new WxRequest("xxxxxxxxxxxxxxxxxxxxxxx"), token.access_token());
    System.out.println(wxResponse);
}

你可能感兴趣的:(springboot,spring,cloud,spring,boot,spring,openfeign,rpc)