OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解,如@RequestMapping等
OpenFeign的使用是创建一个接口,并在接口上添加一些注解 ,包括feign自己提供的接口
使用feign的appliction.properties配置文件和注册到eureka的客户端没有什么明显区别
一、maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
二、springboot启动类所需注解
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerOrderFeignApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerOrderFeignApplication.class, args);
}
}
三、接口创建
3.1 根据服务名称创建feign接口
根据“提供者”的应用别名provider来
该接口里的方法名可以随意取,但返回值类型、post或get的http请求方式、方法形参用到的注解以及@GetMapping里的url必须和提供者一样
@FeignClient("PROVIDER")
public interface MyFeignClient {
/**
* 获取对象
*
* @param id id
* @return user对象
*/
@GetMapping("/user/{id}")
User getOrder(@PathVariable Integer id);
/**
* 如果传递的是复杂参数 Feign都会以post方式发出 提供者必须是post方式
* 获取user
*
* @param user 传入复杂的参数
* @return user对象
*/
@PostMapping("/getUser")
User getUser(User user);
}
3.1.1 feign自定义配置
写一个配置类 这样创建feign接口就可以使用feign自带的注解进行相应的操作
@Configuration
public class FeignClientConfig {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
/**
* 配置输出的日志
*/
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
在feign接口里使用自定义配置
@RequestLine和@Param都是feign提供的注解
@FeignClient(name = "PROVIDER", configuration = FeignClientConfig.class)
public interface MyFeignClient {
/**
* 获取对象
* 可以使用feign提供的注解 第一个参数是请求方式 第二是路径 用空格分隔
* 如果使用RequestLine注解则 需要与@Param注解结合使用
*
* @param id id
* @return user对象
*/
@RequestLine("GET /user/{id}")
User getOrder(@Param("id") Integer id);
/**
* 如果传递的是复杂参数 Feign都会以post方式发出 提供者必须是post方式
* 获取user
*
* @param user 传入复杂的参数
* @return user对象
*/
@RequestLine("POST /getUser")
User getUser(User user);
}
3.2 根据服务的url创建feign接口
@FeignClient注解里的name可以随意取名
@FeignClient(name = "xxxx", url = "http://localhost:8761", configuration = FeignClientConfig01.class)
public interface MyFeignClient01 {
/**
* 访问eureka的页面
*
* @param serviceName 名称
* @return 字符串
*/
@RequestLine("GET /eureka/apps/{serviceName}")
String findServiceInfoFromEurekaByServiceName(@Param("serviceName") String serviceName);
}
但如果对应的服务配置了security需要账号密码则需要在配置类中写相应的代码,这里创建了一个FeignClientConfig01配置类
@Configuration
public class FeignClientConfig01 {
/**
* 配置security的账号密码
*
* @return
*/
@Bean
public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
return new BasicAuthRequestInterceptor("user", "123");
}
}
