就是接口加注解,声明式web服务客户端。
来历:
现在我们都普遍使用面向接口编程,所以为了适应大家的需要,就出现了Feign接口。
微服务调用的方式
1、通过服务名字获取调用的地址;
由
private static String PREFIX_URL="http://127.0.0.1:8083/user/";
变为
private static String PREFIX_URL="http://PROVIDERCRUD/user/";
2、通过接口+注解的方式获取调用的地址;
Feign
即Feign自带负载均衡。
Feign的使用:
首先就是要引入相关依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
因为feign自带负载均衡,所以不需要引入ribbo依赖。也不需要对ribbon进行配置,Feign默认使用轮询算法。
建立feign接口:
@FeignClient(name = "PROVIDERCRUD")
public interface UserClientFeign {
@GetMapping(value = "/user/getAllUser")
public String userList();
}
在接口上必须添加 @FeignClient 注解。
name表示服务名。
@GetMapping中的value值是生产者端相应方法的URI访问路径。
补充:@FeignClient 注解源码:(可略过)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FeignClient {
@AliasFor("name")
String value() default "";
/** @deprecated */
@Deprecated
String serviceId() default "";
@AliasFor("value")
String name() default "";
String qualifier() default "";
String url() default "";
boolean decode404() default false;
Class<?>[] configuration() default {};
Class<?> fallback() default void.class;
Class<?> fallbackFactory() default void.class;
String path() default "";
boolean primary() default true;
}
使用feign接口:
@RestController
@RequestMapping(value = "/feign")
public class UserControllerFeign {
@Resource
private UserClientFeign userClientFeign;
@GetMapping("/getAllUser")
public String getAllUser(){
String s = userClientFeign.userList();
return s;
}
}
启动类:
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.hwj.sggapi.service")
public class SpringCloudTestSGGFeign {
public static void main(String[] args) {
SpringApplication.run(SpringCloudTestSGGFeign.class,args);
}
}
一定要添加 @EnableFeignClients 注解。其中basePackages是feign接口所在路径。
到此即可实现feign接口的负载均衡。