Feign

Feign的demo

jar包

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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

配置 

spring.application.name=feign-client
server.port=40006
eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/

启动类

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class FeignConsumerApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(FeignConsumerApplication.class)
                .web(WebApplicationType.SERVLET)
                .run(args);
    }

}

调用其他微服务的接口

@FeignClient("eureka-client")
public interface IService {

    @GetMapping("/sayHi")
    String sayHi();

}

编写Controller层

@RestController
public class Controller {

    @Autowired
    private IService service;

    @GetMapping("/sayHi")
    public String sayHi() {
        return service.sayHi();
    }

}

Feign的demo升级

@EnableFeignClients:加载到消费者的启动类中
@FeignClient("feign-client"):加载到消费者需要调用的服务sevice接口上面

 

可以将所有需要调用的feigen单独整理成一个mudel,当其他模块调用时,可以将这个模块作为依赖引入到消费者模块,服务提供者可以implements这个接口(一些需要远程调用的方法),然后服务消费者调用接口实现远程服务调用

 

配置超时和重试策略(配置到消费者中)

# 每台机器最大重试次数
feign-client.ribbon.MaxAutoRetries=2
# 可以再重试几台机器
feign-client.ribbon.MaxAutoRetriesNextServer=2
# 连接超时
feign-client.ribbon.ConnectTimeout=1000
# 业务处理超时
feign-client.ribbon.ReadTimeout=2000
# 在所有HTTP Method进行重试
feign-client.ribbon.OkToRetryOnAllOperations=true

 

 

 

Feign源码解读

class FeignClientsRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware 

ResourceLoaderAware:可以得到Bean的具体信息:ResourceLoaderAware

EnvironmentAware :凡注册到Spring容器内的bean,实现了EnvironmentAware接口重写setEnvironment方法后,在工程启动时可以获得application.properties的配置文件配置的属性值。EnvironmentAware

注意点:扫描main函数下面的包

ClassUtils.getPackageName(importingClassMetadata.getClassName());

如果调用的不同业务的服务需要在注解上指定basePackages,basePackageClasses,去引导加载想要的类

@FeignClient(value = xxxxxxxxxx)
    public interface  MyService extends  IService{
        
    }
    #当Bean名字一样的时候,允许被覆盖
  main:
    allow-bean-definition-overriding: true

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值