java.lang.IllegalStateException: Kein Feign-Client für loadBalancing definiert. Haben Sie vergessen, Spring-Cloud-Starter-Netflix-Ribbon einzuschließen?

Sep 02 2020

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

2 UalterJr. Oct 06 2020 at 08:42

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
HarshalPatil Sep 09 2020 at 15:41

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

  1. Fügen Sie diese Abhängigkeit Ihrer pom.xml hinzu
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
  1. FeignClient-Schnittstelle

    @FeignClient(name="ServiceName")
    @RibbonClient(name="ServiceName")
    
  2. Konfigurieren Sie Ihre application.properties wie unten angegeben

ServiceName.ribbon.listOfServers = http: // localhost: 8000, http: // localhost: 8001

AbduqodirUbaydullayev Nov 24 2020 at 17:06

Band

Benötigt Spring Boot Version> = 2.0.0.RELEASE und <2.4.0-M1