上一篇文章介绍了SpringCloud整合Nacos,应用服务通过Nacos的注册中心发布订阅。Nacos支持Http,Dubbo,GRPC等协议服务注册, 本文章pay-service支付模块作为支付服务提供者,order-service订单模块作为服务消费,模拟订单模块调用支付模块接口。
这里支付模块的接口为SpringBoot Http+Json风格的API接口。pay-service,order-service模块也按照上篇文章配置服务注册到了到Nacos注册中心中。

Fegin使用

  • Feign​:Feign是Netflix公司开发的一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加容易。Feign简化了HTTP请求和响应的处理,并且支持多种注解,如Feign自带的注解或JAX-RS注解等。然而,Feign本身并不支持Spring MVC注解,这在Spring用户中可能带来不便。此外,Netflix在2019年宣布Feign组件进入停更维护状态。
  • OpenFeign​:OpenFeign是Spring Cloud对Feign的增强和扩展,作为Feign的替代方案推出。OpenFeign支持Spring MVC注解,如@RequestMapping、@GetMapping等,使得与Spring框架的集成更加无缝。OpenFeign是Spring Cloud的一个二级子项目,持续得到更新和维护。

依赖引入

<dependency>
    <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

使用举例

pay-service提供SpringMVC注解的Http接口,请求接口为GET、POST、PathVariable等举例:

@RestController
@RequestMapping("/pay")
public class PayController {
    @GetMapping("/byGet")
    public String byGet(String userName){
        UserDTO userDTO=new UserDTO();
        userDTO.setUserName("reply:hello "+userName);
        return userDTO.getUserName();
    }
    @PostMapping("/byPost")
    public String byPost(@RequestBody UserDTO userDTO){
        userDTO.setUserName("reply:hello "+userDTO.getUserName());
        return userDTO.getUserName();
    }
    @GetMapping("/byPath/{userName}")
    public String byPath(@PathVariable("userName") String userName){
        UserDTO userDTO=new UserDTO();
        userDTO.setUserName("reply:hello "+userName);
        return userDTO.getUserName();
    }
}

order-service使用OpenFegin对应调用代码

@FeignClient(name = "pay-service")
public interface PayService {
    @GetMapping(value = "/pay/byGet")
    public String byGet(@RequestParam("userName") String userName);
    @PostMapping(value = "/pay/byPost")
    public String byPost(@RequestBody UserDTO userDTO);
    @GetMapping(value = "/pay/byPath/{userName}")
    public String byPath(@PathVariable("userName") String userName);
}
@SpringBootApplication
@ComponentScan("vip.codehome")
@EnableFeignClients(basePackages = "vip.codehome.order.service.remote")
@EnableDiscoveryClient
public class OrderBoot {

    public static void main(String[] args) {
        SpringApplication.run(OrderBoot.class, args);
    }

}

Fegin常用配置

官方文档地址:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign

开启日志

@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}
spring:
  level:
    vip.codehome.order.service.remote: DEBUG # 替换为你的Feign客户端所在的包名

使用okhttp

<dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-okhttp</artifactId>
            <version>13.3</version>
</dependency>
feign:
  okhttp:
    enabled: true
文章作者: 编程之家
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程之家
springcloud fegin nacos
喜欢就支持一下吧