标签: spring-cloud-loadbalancer

没有可用的服务器提供服务:在 Netflix 功能区中路由时

我在 Spring Boot 2.3.4 中有以下工作代码

public Route.AsyncBuilder apply(PredicateSpec route) {
    return route
            .path("/api/external/**")
            .filters(f -> f
                    .removeRequestHeader("Cookie")
                    .filter(loggingGatewayFilter)
                    .filter(oauth2GatewayFilter)
                    .filter(this::filter)
            )
            .uri("lb://external-url");
}
Run Code Online (Sandbox Code Playgroud)

配置:

external-url:
 ribbon:
  listOfServers: "http://external01.com,http://external02.com"
  NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
Run Code Online (Sandbox Code Playgroud)

当我将 Spring Boot 版本升级到 2.4.2 时,代码必须更改为以下内容。

public Buildable<Route> apply(PredicateSpec route) {
    return route
            .path("/api/external/**")
            .filters(f -> f
                    .removeRequestHeader("Cookie")
                    .filter(loggingGatewayFilter)
                    .filter(oauth2GatewayFilter)
                    .filter(this::filter)
            )
            .uri("lb://external-url");
}
Run Code Online (Sandbox Code Playgroud)

由于 netflix-ribbon 已在 Spring Boot 2.4.2 中删除,我必须添加这些依赖项。在路由中它给出以下警告。这意味着负载均衡器未初始化。

o.s.c.l.core.RoundRobinLoadBalancer : No servers available for service: external-url
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题我可以尝试将其迁移到弹簧负载平衡器中吗

升级后的依赖树:

[INFO] +- org.apache.commons:commons-lang3:jar:3.9:compile
[INFO] +- com.internetitem:logback-elasticsearch-appender:jar:1.6:compile …
Run Code Online (Sandbox Code Playgroud)

spring-boot spring-cloud spring-cloud-netflix spring-cloud-gateway spring-cloud-loadbalancer

5
推荐指数
1
解决办法
2万
查看次数

负载均衡器不包含该服务的实例

我想将 Eureka 客户端与spring-cloud-starter-loadbalancer. 但是当我添加配置时出现错误。当我删除@LoadBalancerClient(name = "mail-service", configuration = LoadBalancerConfiguration.class)LoadBalancerConfiguration类配置时,它工作正常。我尝试了这段代码:

    @FeignClient(name = "mail-service")
    @LoadBalancerClient(name = "mail-service", configuration = LoadBalancerConfiguration.class)
    public interface EmailClient {
    
        @RequestMapping(method = RequestMethod.POST, value = "/engine/emails/register")
        void setUserRegistration(CreateUserDTO createUserDTO);
    }


@Configuration
public class LoadBalancerConfiguration {

    @Bean
    public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(ConfigurableApplicationContext context) {
        return ServiceInstanceListSupplier.builder()
                .withBlockingDiscoveryClient()
                .withSameInstancePreference()
                .withHealthChecks()
                .build(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序.yml:

feign:
    client:
        config:
            default:
                connectTimeout: 5000
                readTimeout: 5000
                loggerLevel: basic
eureka:
    client:
        serviceUrl:
            defaultZone: ${EUREKA_URI:http://localhost:8761/eureka}
        fetchRegistry: true
        healthcheck:
            enabled: true
    instance:
        preferIpAddress: …
Run Code Online (Sandbox Code Playgroud)

spring spring-cloud netflix-eureka spring-cloud-loadbalancer

4
推荐指数
1
解决办法
2万
查看次数

如果我们在 K8s 中部署应用程序时拥有相同的 Spring Cloud,例如 Eureka discovery、Ribbon 等,何时使用 Spring Cloud?

我们在 Spring 云中有负载均衡、发现等功能。但 Kubernetes 中也提供了相同的负载平衡和发现功能。所以只是想知道什么时候应该使用 Spring Cloud(负载均衡或发现)以及什么时候使用 Kubernetes

spring-boot kubernetes spring-cloud spring-cloud-loadbalancer

4
推荐指数
1
解决办法
939
查看次数

在 Spring Cloud Gateway 中将配置从 Ribbon 更改为 Spring Cloud Load Balancer

我有以下带有功能区的 Spring Cloud Gateway 配置

server:
  port: 8080

spring:
  cloud:
    gateway:
      routes:
        - id: UserModule
          uri: lb://load-balanced-service-user
          predicates:
            - Path=/api/user/**
ribbon:
  eureka:
    enabled: false
Load-balanced-service-user:
  ribbon:
    listOfServers: localhost:9999,localhost:8888
Run Code Online (Sandbox Code Playgroud)

现在我想删除 Ribbon 并替换为 Spring Cloud 负载均衡器。

我添加了

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

现在我需要在 application.yaml 文件中添加哪些其他配置才能切换到 Spring Cloud 负载均衡器?我想在 .yaml 文件上添加配置。我不想用 .yaml 文件中配置的功能区破坏旧结构。

spring-boot spring-cloud-netflix spring-cloud-gateway spring-cloud-loadbalancer

3
推荐指数
1
解决办法
3547
查看次数