java - java.lang.IllegalStateException:没有定义负载平衡的假装客户端。您是否忘记包含 spring-cloud-starter-netflix-ribbon?
问题描述
我得到了例外:
FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-netflix-ribbon?
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1654)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1174)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:224)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1012)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:338)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:333)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105)
at com.hsbc.gbgcf.spartan.referencedatabase.UserRegistrationApplication.main(UserRegistrationApplication.java:57)
在执行我的项目时。我的 pom.xml 包含
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
我也在我的其他项目中使用 feign 客户端,没有任何额外的功能区依赖,这些都使用相同的 spring-boot 版本 2.0.8
我已经针对相同的问题引用了其他堆栈溢出链接,他们要求添加功能区的其他依赖项。我尝试在我的 pom.xml 中添加相同的内容,但没有帮助。
FeignClient 接口是,
@FeignClient(value = "user-service", decode404 = true)
public interface UserFeignClient {
@PostMapping("/do-something")
void doSomething();
}
主类代码:
@Configuration
@EnableAspectJAutoProxy
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication(scanBasePackages = {"test.user"})
public class UserRegistrationApplication{
public static void main(String[] args) {
UserFeignClient userFeignClient = applicationContext.getBean(UserFeignClient.class);
userFeignClient.doSomething();
System.exit(SpringApplication.exit(applicationContext));
}
}
我正在使用 Sprint Boot 版本 2.0.8。
解决方案
您必须决定使用哪个客户端负载均衡器:(1) Spring Cloud Loadbalancer或 (2) Ribbon。
Spring Cloud Loadbalancer 是一个通用抽象,可以完成我们过去在 Netflix 的 Ribbon 项目中所做的工作。Spring Cloud 仍然支持 Netflix Ribbon,但 Netflix Ribbons 的日子已经屈指可数了,就像 Netflix 微服务堆栈的其他许多内容一样,因此我们提供了一个抽象来支持替代方案
在这里查看:https ://spring.io/blog/2020/03/25/spring-tips-spring-cloud-loadbalancer
(1) Spring Cloud 负载均衡器:
spring:
cloud:
loadbalancer:
ribbon:
enable: false
# And... inform the "url" attribute at FeignClient
@FeignClient(name = "student", url = "student")
(2) Ribbon : 添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
# And (optionally)... @application.yaml
spring:
cloud:
loadbalancer:
ribbon:
enable: true
推荐阅读
- oracle-apex - oracle apex 中的邮政地址验证
- android - 为什么点击按钮不显示你好?
- ansible - Ansible 循环直到结果不为空
- c++ - 总和的最后一位
- r - 年份每 12 行出现一次,但我想要在所有行上
- flutter - Flutter Webview 关闭键盘
- django - uWSGI 找不到 python3 插件 - open("./python3_plugin.so"): No such file or directory
- javascript - 使用 .map() 而不是 .forEach 来创建对象
- flutter - 为什么当我包含扩展小部件时它不显示?它只是不显示(例如,当我用容器替换它时,它显示)
- c++ - 如何让 C++ wfstream 使用 Unicode 文件路径?