java.lang.IllegalStateException: Kein Feign-Client für loadBalancing definiert. Haben Sie vergessen, Spring-Cloud-Starter-Netflix-Ribbon einzuschließen?
Ich bekomme eine Ausnahme
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)
bei der Ausführung meines Projekts. Meine pom.xml enthält
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
Ich verwende den Feign-Client auch in anderen Projekten von mir ohne zusätzliche Abhängigkeit von der Multifunktionsleiste und diese funktionieren mit derselben Spring-Boot-Version 2.0.8
Ich habe einen anderen Stapelüberlauflink für dasselbe Problem verwiesen und sie haben darum gebeten, eine zusätzliche Abhängigkeit des Menübands hinzuzufügen. Ich habe versucht, dasselbe in meine pom.xml einzufügen, aber es hat nicht geholfen.
FeignClient-Schnittstelle ist,
@FeignClient(value = "user-service", decode404 = true)
public interface UserFeignClient {
@PostMapping("/do-something")
void doSomething();
}
Hauptklassencode,
@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));
}
}
Kann mir bitte jemand bei diesem Problem helfen?
Sprint-Boot Version 2.0.8 verwende ich
Antworten
Sie müssen entscheiden, welcher Client-Load-Balancer verwendet werden soll: (1) Spring Cloud Loadbalancer oder (2) Multifunktionsleiste .
Spring Cloud Loadbalancer ist eine generische Abstraktion, die die Arbeit erledigen kann, die wir früher mit dem Ribbon-Projekt von Netflix gemacht haben. Spring Cloud unterstützt weiterhin Netflix Ribbon, aber die Netflix Ribbons-Tage sind wie so viele andere Teile des Netflix Microservices-Stacks nummeriert. Daher haben wir eine Abstraktion bereitgestellt, um eine Alternative zu unterstützen
Überprüfe hier: https://spring.io/blog/2020/03/25/spring-tips-spring-cloud-loadbalancer
(1) Spring Cloud Load Balancer :
spring:
cloud:
loadbalancer:
ribbon:
enable: false
# And... inform the "url" attribute at FeignClient
@FeignClient(name = "student", url = "student")
(2) Multifunktionsleiste : Fügen Sie die Abhängigkeit hinzu:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
# And (optionally)... @application.yaml
spring:
cloud:
loadbalancer:
ribbon:
enable: true
Fügen Sie ServiceName (dh feignName) mit seiner URL in Ihre feignClient-Oberfläche ein.
@FeignClient(name = "user-service", url = "feignUrl", decode404 = true)
public interface UserFeignClient {
@PostMapping("/do-something")
void doSomething();
}
Feign Client ist ein Tool, mit dem Sie Rest-Api eines anderen Dienstes einfacher aufrufen können, da Ribbon hauptsächlich für den Lastausgleich verwendet wird.
Wenn Sie ein Farbband verwenden möchten
- Fügen Sie diese Abhängigkeit Ihrer pom.xml hinzu
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>
FeignClient-Schnittstelle
@FeignClient(name="ServiceName") @RibbonClient(name="ServiceName")Konfigurieren Sie Ihre application.properties wie unten angegeben
ServiceName.ribbon.listOfServers = http: // localhost: 8000, http: // localhost: 8001
Band
Benötigt Spring Boot Version> = 2.0.0.RELEASE und <2.4.0-M1