Springboot 集成openfeign 实现微服务之间的调用
首先引用 feign 依赖
<!--feign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-okhttp</artifactId> <version>8.10.1</version> </dependency> <!--sentinel--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
其次在yml文件中配置一下 fegin,因为 fegin 是集成了 ribbon 的,所以也配置一下ribbon 下章会写 ribbon 的自定义均衡器
feign: sentinel: enabled: true #开启feign sentinel监控 ribbon: MaxAutoRetries: 2 MaxAutoRetriesNextServer: 3 OkToRetryOnAllOperations: false ConnectTimeout: 5000 ReadTimeout: 6000
在启动类上添加 @EnableFeignClients 注解 这样才会生效
@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class TransdataApplication { public static void main(String[] args) { SpringApplication.run(TransdataApplication.class, args); } }
开启 fegin 注解
/** * @Author: * @Date: 2019/7/6 * @Version 1.0 * 开启 feign 注解 */ public class MyFeignConfiguration { //自定义重试次数 @Bean public Retryer feignRetryer() { Retryer retryer = new Retryer.Default(100, 1000, 4); return retryer; } }
开始写服务调用的接口了,有很多人不理解 fegin 的这种写法。 @FeignClient 做一个标识,告诉spring容器这里是一个fegin 的客户端。里面的value 即这个客户端是要调用哪个服务用的。configuration 是feigin 的配置。 fallbackFactory 是用来定义熔断器的,就是当被调用服务异常的时候会走这里面。
@GetMapping(value = “/detaineeMain/find”, consumes = “application/x-www-form-urlencoded”) 这个是指向value =“jail-detain” 服务的 /detaineeMain/find 这个方法。findUser 这个是随便取的。
/** * 所端微服务接口 * @author * @version 1.0 * @date 2019/10/15 11:38 */ @FeignClient(value ="jail-detain" ,configuration= MyFeignConfiguration.class,fallbackFactory = JailDetainFallback.class) public interface JailDetainClient { //入口参数是json 时consumes 得设置 不然有些会报Content type text/plain;charset=UTF-8 not supported 错误 @GetMapping(value = "/detaineeMain/find", consumes = "application/x-www-form-urlencoded") String findUser(@RequestParam Map<String, Object> thisMap); }
定义fegin 的熔断器,当被调用服务异常时会尽这里
/** * @author * @version 1.0 * @date 2019/10/15 11:38 */ @Component public class JailDetainFallback implements FallbackFactory<JailDetainClient> { Map map = new HashMap<String , String>(){ { put("code", "0"); put("msg","jail-detain 服务异常"); }}; @Override public JailDetainClient create(Throwable cause) { return new JailDetainClient() { @Override public String findUser(Map map) { return FastJsonUtils.getBeanToJson(map); } }; } }
好了这样就可以调用了
/** * @Author: * @Date: 2019/6/27 * @Version 1.0 */ @RestController public class TestController { @Resource JailDetainClient jailDetainClient; @PostMapping("test111") public BasePageResult test(){ String test = jailDetainClient.findUser(new HashMap()); return BasePageResultUtil.success(test); } }
下一篇:
不同版本openfeign的超时配置