【Springcloud专栏八】Feign伪装

目录

Feign

为什么要使用Feign

Feign伪装的实现【服务调用方consumer-service】

    1、引入依赖【继承了ribbon、hystrix,可以省略ribbon的依赖】

    2、配置启动类【服务调用方@EnableFeignClients】

    3、新建Client接口+@FeignClient注解

    4、controller部分【服务调用方consumer-service】

    5、实现效果

集成Hystrix

    1、修改调用方yaml【设置开启】

    2、修改Client类并添加回退类HystrixClientFallback


Feign

        Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做。

为什么要使用Feign

        代码不够优雅,feign可以帮你完成拼接url远程调用等操作

Feign伪装的实现【服务调用方consumer-service】

    1、引入依赖【继承了ribbon、hystrix,可以省略ribbon的依赖】

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

    2、配置启动类【服务调用方@EnableFeignClients】

@EnableFeignClients    // Feign
@EnableCircuitBreaker  // 服务熔断
@EnableDiscoveryClient // 内部既能兼容eurake又能兼容zookeeper
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})
//@SpringCloudApplication  // 如果使用该注解,上面三个可以隐藏
public class ConsumerApplication {

//    配置feign后该部分可以隐藏了
//    @Bean
//    @LoadBalanced
//    public RestTemplate restTemplate() {
//        return new RestTemplate();
//    }

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

    3、新建Client接口+@FeignClient注解

以下四个条件需要完全符合:

  1. 请求路径【服务名+requestMapping】;
  2. 参数;
  3. 请求方式;
  4. 返回类型
@FeignClient("user-service")
public interface UserClient {

    @GetMapping("user/{id}")
    User queryById(@PathVariable("id") BigDecimal id);
}

该controller是user-servivce的方法:

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User queryById(@PathVariable("id")BigDecimal id) {
        return userService.queryById(id);
    }
}

    4、controller部分【服务调用方consumer-service】

修改服务调用代码:

@RestController
@RequestMapping("consumer")
public class ConsumerController {

    @Autowired
    private UserClient userClient;

    @GetMapping("{id}")
    public User queryById(@PathVariable("id")BigDecimal id){
        return userClient.queryById(id);
    }

}

    5、实现效果

集成Hystrix

    1、修改调用方yaml【设置开启】

ribbon:
  ConnectionTimeOut: 500 // 500毫秒连接没有建立抛出异常
  ReadTimeOut: 2000 // 建立连接后2S未读取到数据抛出异常
feign:
  hystrix:
    enabled: true

ribbon:
  ConnectionTimeOut: 500
  ReadTimeOut: 2000

    2、修改Client类并添加回退类HystrixClientFallback

@FeignClient(name = "user-service", fallback = HystrixClientFallback.class)
public interface UserClient {

    @GetMapping("user/{id}")
    User queryById(@PathVariable("id") BigDecimal id);

}

@Component
class HystrixClientFallback implements UserClient {
    @Override
    public User queryById(BigDecimal id) {
        User user = new User();
        user.setUsername("熔断");
        return user;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值