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的超时配置 
			          
			        