检查步骤
- 检查springboot启动类是否标注@EnableFeignClients注解,未标注该注解会导致无法注入bean
- 检查远程调用模块是否标注注解@FeignClient
- 检查@FeignClient注解中是否写了正确的微服务名称(区分大小写)
- 检查@FeignClient注解中标识的微服务是否启动
原因:此处接口可以声明@@Component注入ioc容器;并且启动类注解@EnableFeignClients若声明了接口所扫描package范围;则需要对应加上否则feign调用不生效启动bean报错s。
OpenFeign是一个显示声明式的WebService客户端。使用OpenFeign能让编写Web Service客户端更加简单。使用时只需定义服务接口,然后在上面添加注解。OpenFeign也支持可拔插式的编码和解码器。spring cloud对feign进行了封装,使其支持MVC注解和HttpMessageConverts。和eureka(服务注册中心)和ribbon组合可以实现负载均衡。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求,非常的方便。
作用:
-
OpenFeign的设计宗旨式简化Java Http客户端的开发。Feign在restTemplate的基础上做了进一步的封装,由其来帮助我们定义和实现依赖服务接口的定义。在OpenFeign的协助下,我们只需创建一个接口并使用注解的方式进行配置(类似于Dao接口上面的Mapper注解)即可完成对服务提供方的接口绑定,大大简化了Spring cloud Ribbon的开发,自动封装服务调用客户端的开发量。
-
OpenFeign集成了Ribbon,利用ribbon维护了服务列表,并且通过ribbon实现了客户端的负载均衡。与ribbon不同的是,通过OpenFeign只需要定义服务绑定接口且以申明式的方法,优雅而简单的实现了服务调用。
入门使用:
<!--Open feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--服务发现客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--web服务-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
主类主要注解:
@EnableFeignClients({"com.xx.xx", "com.xx.xx"})
代码示例:
A服务
controller层
@RequiredArgsConstructor
@Slf4j
@RestController
@RequestMapping("/inter/Demo")
public class Demo {
@Autowired
TestInterface testInterface;
@PostMapping("/test")
public String test(@RequestBody String param) {
String str= testInterface.test(param);
System.out.println("输出 str:{} " + str);
return str;
}
}
Interface
@FeignClient(
name = "${xx.name:xx}",
url = "${xx.application.xx.url:}",
contextId = "testInterface"
)
public interface TestInterface {
@PostMapping({"/test"})
String test(@RequestBody String var1);
}
url是应用服务对应调用url
B服务
@FeignClient(
name = "${xx.name:xx}",
url = "${xx.application.xx.url:}",
contextId = "testInterface"
)
public interface TestInterface {
@PostMapping({"/test"})
String test(@RequestBody String var1);
}
@RestController
public class TestInterfaceImpl implements TestInterface {
@Override
public String test(String var1) {
System.out.println("var1:{} " + var1);
return "OKOKOK";
}
}
标签:String,OpenFeign,bean,接口,factory,xx,报错,test,注解
From: https://www.cnblogs.com/chillymint/p/18183013