Spring Cloud Gateway 通过集成 **Spring Cloud LoadBalancer** 实现客户端负载均衡,其核心流程如下:
ReactiveLoadBalancerClientFilter 将 lb://service-id 格式的 URI 转换为具体实例地址。<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service # 使用 lb 前缀启用负载均衡
predicates:
- Path=/api/user/\*\*eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/| 策略 | 配置方式 | 适用场景 |
|--------------------|---------------------------------------|------------------------------|
| **轮询(默认)** | 无需额外配置 | 请求均匀分布,适合无状态服务 |
| **随机** | service-id.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule | 避免热点问题,适合缓存场景 |
| **加权响应时间** | service-id.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.WeightedResponseTimeRule | 自动优化性能,适合异构实例 |
@Configuration
public class CustomLoadBalancerConfig {
@Bean
public ReactorLoadBalancer<ServiceInstance> customLoadBalancer(
Environment environment,
LoadBalancerClientFactory clientFactory) {
return new CustomReactorLoadBalancer(
clientFactory.getLazyProvider("your-service-id", ServiceInstance.class),
environment);
}
}spring:
cloud:
gateway:
default-filters:
- name: CircuitBreaker
args:
name: myCircuitBreaker
fallbackUri: forward:/fallback# 配置加权响应时间策略
your-service-id:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule# 服务定义
apiVersion: v1
kind: Service
metadata:
name: user-service
spec:
type: ClusterIP
ports:
- port: 8080
selector:
app: user-servicemanagement:
endpoints:
web:
exposure:
include: gateway,loadbalancer,health| 端点 | 用途 |
|-----------------------|-------------------------------|
| /actuator/gateway/routes | 查看所有路由配置 |
| /actuator/loadbalancer/stats | 获取负载均衡器统计信息 |
| /actuator/health | 检查服务实例健康状态 |
spring.cloud.gateway.discovery.locator.enabled=true 配置。lb://service-id。UP。telnet 或 curl)。application.yml。com.example.CustomRule)。Service + Endpoint 实现自动服务发现。通过以上配置与实践,可构建高可用、可扩展的微服务网关负载均衡体系。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。