热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud学习Feign

1引言Feign可以帮助我们面向接口编程,就直接调用其他服务,简化开发2快速入门1、导入依赖org.springframework

1 引言

Feign可以帮助我们面向接口编程,就直接调用其他服务,简化开发


2 快速入门

1、导入依赖

<dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

2、添加一个注解

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients //添加该注解
public class ClientApplication {public static void main(String[] args) {SpringApplication.run(ClientApplication.class,args);}@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}

3、创建一个接口,并且和search模块做映射

@FeignClient("SEARCH") //服务名称
public interface SearchClient {//value 是映射服务的请求路径,method是映射请求的方式@RequestMapping(value = "/search",method = RequestMethod.GET)String search();
}

4、测试使用

@RestController
public class CustomController {@Autowiredprivate SearchClient searchClient; //注入该客户端@GetMapping("/customer")public String customer() {String search = searchClient.search();return search;}
}

3 Feign的传递参数方式

1、注意事项



  • 如果传递的参数比较复杂,默认会采用POST的请求方式

  • 如果传递单个参数,推荐使用@PathVariable。如果传递的单个参数比较多,也可以采用@RequestParma,不要省略value属性。

  • 传递对象信息时,统一采用json的方式,添加@RequestBody

  • Client接口必须采用@RequestMapping

2、在search模块下准备三个接口

@FeignClient("SEARCH")
public interface SearchClient {@RequestMapping(value = "/search/{id}",method = RequestMethod.GET)Customer findById(@PathVariable(value = "id") Integer id);@RequestMapping(value = "/getCustomer",method = RequestMethod.GET)Customer getCustomer(@RequestParam(value = "id") Integer id, @RequestParam(value = "name") String name);}

3、封装customer模块下的controller

@RestController
public class CustomController {@Autowiredprivate SearchClient searchClient;@GetMapping("/customer/{id}")public Customer findById(@PathVariable(value = "id") Integer id) {return searchClient.findById(id);}@GetMapping("/getCustomer")public Customer getCustomer(@RequestParam Integer id,@RequestParam String name) {return searchClient.getCustomer(id,name);}
}

4 Feign的Fallback

fallback可以帮助feign去调用另外一个服务时,如果出现了问题,走服务降级,返回一个错误数据,避免因为一个服务出现问题,导致全部服务失效。

1、创建一个POJO类,实现Client接口

@Component
public class SearchClientFallBack implements SearchClient {@Overridepublic String search() {return "出现问题!!!";}@Overridepublic Customer findById(Integer id) {return null;}@Overridepublic Customer getCustomer(Integer id, String name) {return null;}@Overridepublic Customer save(Customer customer) {return null;}
}

2、修改Client接口中的注解,天界一个Fallback属性

@FeignClient(value = "SEARCH",fallback = SearchClientFallBack.class)

3、添加一个配置文件。

#feign和hystrix组件整合
feign:hystrix:enabled: true

调用方无法知道错误信息是什么,可以通过FallbackFactory的方式取实现这个功能



  • FallbackFactory基于Fallback



  • 创建一个POJO类,实现FallbackFactory

    @Component
    public class SearchClientFallBackFactory implements FallbackFactory<SearchClient> {@Autowiredprivate SearchClientFallBack searchClientFallBack;@Overridepublic SearchClient create(Throwable throwable) {throwable.printStackTrace();return searchClientFallBack;}
    }


  • 修改Client接口中的属性.

    @FeignClient(value = "SEARCH",fallbackFactory = SearchClientFallBackFactory.class)



推荐阅读
author-avatar
qaz2502919927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有