# vlmap-spring-loadbalancer
**Repository Path**: han_hy/vlmap-spring-loadbalancer
## Basic Information
- **Project Name**: vlmap-spring-loadbalancer
- **Description**: spring cloud 灰度路由
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 21
- **Created**: 2020-01-15
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vlmap-spring-loadbalancer
 #### spring cloud 灰度路由
 
 ###路由规则说明
 
 >1.被调用的所有节点都没配灰度标签(没有灰度服务),使用所有服务节点进行负载,
 
 >2.当前请求为无标签请求时,排除所有包含灰度环境的服务节点,然后进行负载
 
 >3.当前请求为有标签请求时,仅使用灰度环境标签一致的服务节点进行负载
 
 >4.匹配不到灰度环境标签,则使用无标签服务节点(排除是灰度的服务)进行负载
 
  注意:
  >  对于reactive(WebFlux) 环境,因为传值是依靠ThredLocal和HystrixRequestVariable实现,reactive 里的业务方法不能确定在哪个线程里运行,所以再reactive环境中对 resttemplate、feign、 weblcient 客户端调用时负载均衡时需要手动传递请求的灰度值,网关服务 (Zuul,Gateway) 和Servlet环境服务不用考虑该问题
  
1.支持的SpringBoot 版本
>  spring-boot 2
2.支持的注册中心类型
  
 >  Eureka , Nacos ,Consul
 
3.支持的网关类型
>  Zuul, Gateway
4.注册的客户端类型
> Feign,RestTemplate,WebClient.  响应式环境需要手动实现灰度值传递
5.灰度调用示例
```text
 curl -H "LoadBalancer-Tag:debug" http://localhost:8080/demo/test
```
6.MVN坐标
>Step 1. Add the JitPack repository to your build file
 ```xml
 
    
		
		    jitpack.io
		    https://jitpack.io
		
	
```
>  Step 2. Add the dependency
```xml
    
	    com.github.vlmap
	    vlmap-spring-loadbalancer
	    1.0.0
    
```
7.使用实例
  >@EnableGrayLoadBalancer  开启灰度路由
  
 ```java
package com.github.vlmap.gateway;
import com.github.vlmap.spring.loadbalancer.annotation.EnableGrayLoadBalancer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
@EnableGrayLoadBalancer
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}
```
8.标签负载均衡配置
 
   
 >  以下配置动态修改即时生效,建议使用配置中心对 (服务灰度值)进行配置
   
 
```yaml
vlmap:
  spring:
    loadbalancer:
      enabled: true   #当前服务是否启用灰度路由,默认值: true
      header-name: Loadbalancer-Tag #取header-name的值作为灰度路由的值来匹配,支持动态配置,默认值:Loadbalancer-Tag
      feign:
        enabled: true #feign客户端是否启用灰度路由,默认值: true
      rest-template:
        enabled: true #RestTemplate客户端是否启用灰度路由,默认值: true
      web-client:
        enabled: true #WebClient客户端是否启用灰度路由,默认值: true
      strict:
        enabled: true #是否启用严格模式(如果启用,Loadbalancer-Tag的值必匹配当前服务说配置的灰度值,不匹配返回 HTTP code),默认值: true
        code: 403     #严格模式验证不通过返回的状态码
        message: Fibbon   #严格模式验证不通过返回的状态描述
        ignore:
          default:
            enabled: true  #启用默认忽略列表  默认值: true
          path:            #忽略列表,匹配列表的请求将不启用严格模式
            - /antpath/**   # ANT-PATH
            - /antpath2/**
#(服务灰度值) 配置
MICRO-CLOUD-SERVICE: # 大写  , 这里是 ribbon 要请求的服务的 service-id 值
  ribbon:
    gray:
      - id:  172.18.70.27:7004   #  远程服务具体节点的ID(注册中心中注册的 IP:PORT ,静态服务使用listOfServers值),支持动态配置
        tags: debug,debug1,debug2  # 指定节点灰度路由匹配的值,多个用“,”分割,支持动态配置
      - id:    172.18.70.27:7005
        tags: debug,debug1,debug2
```