Springboot 集成openfeign 实现微服务之间的调用
首先引用 feign 依赖<!--feign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifa...
·
首先引用 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);
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)