Feign 声明式服务调用
一、 简单服务搭建
pom 引用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
1、FeignApplication
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class, args);
}
}
2、 controller层
@RestController
public class CilentController {
@Value("${server.port}")
String port;
@RequestMapping("/show")
public String show(){
System.out.println("客户端1测试信息,启用的端口号:"+port);
return "客户端信息";
}
}
3、 FeignClient
@org.springframework.cloud.netflix.feign.FeignClient("eureka-client")
public interface FeignClient {
@RequestMapping(value = "/show/{id}",method = RequestMethod.GET)
public Object findByUser(@PathVariable("id") String id);
}
二、重写feign 默认设置
1、 配置类
@Configuration
public class FeignConfig {
@Bean
public Contract feignContract() {
return new feign.Contract.Default();
}
}
2、FeignClient 类
FeignClient中name属性为必填, configuration 引用配置类
@org.springframework.cloud.netflix.feign.FeignClient(name="eureka-client",configuration = FeignConfig.class)
public interface FeignClient {
@RequestLine("GET /show/{id}")
public Object findByUser(@Param("id") String id);
}
3、 添加feign日志
yml 配置文件:
logging:
level:
cn.pl.feign.FeignApplication : debug
FeignClient 类中添加日志方法
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
三、 feign参数传递
1、 当传递基本类型的变量时, 在cilent方法中添加@RequestParam("")注解
@RequestMapping(value = "/person/getRecord")
public String getRecord(@RequestParam("id") String id);
2、当传递复杂变量时,在客户端的controller中,加入@RequestBody
@ResponseBody
@RequestMapping("/person/save")
public void save(@RequestBody Users users){
System.out.println("cilent---user:"+JSONObject.toJSONString(users));
usersService.saveInfo(users);
}