huaweicloud / spring-cloud-huawei

Spring Cloud Huawei is a framework that makes it easier and productive to develop microservices with Spring Cloud.
https://github.com/huaweicloud/spring-cloud-huawei/wiki
Apache License 2.0
516 stars 221 forks source link

spring-cloud-huawei 1.9.2-Hoxton灰度规则中配置header的规则,获取实例列表抛空值 #822

Closed markey92 closed 1 year ago

markey92 commented 2 years ago

7515EE54-DC41-45DC-BE1A-40DE77A59926

markey92 commented 2 years ago

realHeaders从RouterTrackContext.getRequestHeader中获取,是不是判一下空比较安全 3A7F4AB4-816F-4C40-82B5-B6DBF9C36E71

liubao68 commented 2 years ago

你能提供下问题复现条件吗?

markey92 commented 2 years ago

你能提供下问题复现条件吗?

灰度规则

代码调用,获取一个对端的实例信息 @Autowired private LoadBalancerClient loadBalancer;

/**
 * 获取服务实例,ribbon默认轮询策略
 * @param serviceName
 * @return
 */
public ServiceInstance getOneInstance(String serviceName) {
    return loadBalancer.choose(serviceName);
}

建议RouterTrackContext里面,header为null返回空Map public static Map<String, String> getRequestHeader() { if (requestHeaderThreadLocal.get() == null) { return Collections.emptyMap(); } return requestHeaderThreadLocal.get(); }

liubao68 commented 2 years ago

你用的 LoadBalancerClient 看起来是 spring-cloud-commons里面新提供的接口,不是Ribbon的。 是不是应该使用 2020.0.x 或者 2021.0.x版本呀? Spring Cloud 已经停止维护 Hoxton 版本了, Spring Cloud Huawei也只提供适当的bug fix。

liubao68 commented 1 year ago

spring-cloud-commons 的 LoadBalancerClient 和 Hoxton 无法一起使用; Hoxton需要使用Netflix的Ribbon。 这个问题关闭。