线上部署项目的时候,各个微服务不只部署一份,有时候,为了测试,可以进行灰度发布,先测试新的服务是否可用
1.微服务之间调用
微服务A 调用微服务B,灰度规则定义在数据库中或者元数据中
微服务A 中 定义灰度规则
ribbon 灰度发布 适合 各个微服务之间的调用
引入:
<dependency>
<groupId>io.jmnarloch</groupId>
<artifactId>ribbon-discovery-filter-spring-cloud-starter</artifactId>
<version>2.1.0</version>
</dependency>
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;
import com.netflix.niws.loadbalancer.DiscoveryEnabledServer;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GrayRule extends AbstractLoadBalancerRule {
/**
* 根据用户选出一个服务
* @param iClientConfig
* @return
*/
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
@Override
public Server choose(Object key) {
return choose(getLoadBalancer(),key);
}
public Server choose(ILoadBalancer lb, Object key){
System.out.println("灰度 rule");
Server server = null;
while (server == null){
// 获取所有 可达的服务
List<Server> reachableServers = lb.getReachableServers();
// 获取 当前线程的参数 用户id verion=1
Map<String,String> map = RibbonParameters.get();
String version = "";
if (map != null && map.containsKey("version")){
version = map.get("version");
}
System.out.println("当前rule version:"+version);
// 根据用户选服务
for (int i &#