微服务调试负载小记

微服务调试负载小记

在我们微服务中,通常在调试阶段,如果人员多并且我们使用同一服务注册地址,将出现调试自己本地代码,跳转到别人电脑去的情况,对于上述情况我们大致有以下几种解决方案

方案一

nacos分组

使用nacos,组员建立对应分组,并把本地微服务注册到自己分组进行处理

方案二

多点几下

哈哈哈,就是字面意思,多点几下,因为使用的是负载机制,多点几下就路由到你的pc了

人少的时候可以使用这种方式,懒人必备~

方案三

代码层面

重写路由规则

public class CustomRibbonRule extends AbstractLoadBalancerRule {

    @Value("${shuhai.ribbon.local.enable:false}")
    private boolean ribbonLocalEnable;
    @Value("${shuhai.ribbon.local.host:}")
    private String ribbonLocalHost;

    public CustomRibbonRule() {
    }

    @SuppressWarnings({"RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"})
    public Server choose(ILoadBalancer lb, Object key) {
        if (lb == null) {
            return null;
        } else {
            Server server = null;

            while (server == null) {
                if (Thread.interrupted()) {
                    return null;
                }

                List<Server> upList = lb.getReachableServers();
                List<Server> allList = lb.getAllServers();
                int serverCount = allList.size();
                if (serverCount == 0) {
                    return null;
                }
                // TODO: 2021/3/27 更改负载机制,包含自己host则走本地 调试用
                if (ribbonLocalEnable && StrUtil.isNotEmpty(ribbonLocalHost)) {

                    for (Server server1 : allList) {
                        if (ribbonLocalHost.equals(server1.getHost())) {
                            server=  server1;
                            break;
                        }
                    }
                } else {
                    int index = this.chooseRandomInt(serverCount);
                    server = (Server) upList.get(index);
                }

                if (server == null) {
                    Thread.yield();
                } else {
                    if (server.isAlive()) {
                        return server;
                    }

                    server = null;
                    Thread.yield();
                }
            }

            return server;
        }
    }

    protected int chooseRandomInt(int serverCount) {
        return ThreadLocalRandom.current().nextInt(serverCount);
    }

    public Server choose(Object key) {
        return this.choose(this.getLoadBalancer(), key);
    }

    public void initWithNiwsConfig(IClientConfig clientConfig) {
    }
}

使用

@Configuration(proxyBeanMethods = false)
public class RibbonConfiguration {
    @Bean
    public IRule ribbonRule() {
        //自定义负载规则
        return new CustomRibbonRule();
    }
}

启动类更改

增加@RibbonClient(name = "MICROCLOUDSERVICE-PROVIDER-HANGUANG", configuration = RibbonConfiguration.class)

@EnableFeignClients
@EnableBaseFeignInterceptor
@EnableDiscoveryClient
@RibbonClient(name = "MICROCLOUDSERVICE-PROVIDER-HANGUANG", configuration = RibbonConfiguration.class)
@SpringBootApplication(scanBasePackages = {"com.shuhai", "com.shuhai"})
public class SHGatewayApp {
    public static void main(String[] args) {
        SpringApplication.run(SHGatewayApp.class, args);
    }
}

方案四

服务名称更改,并保持全局一致,个人调试在后面增加标识即可

以用户中心为例:sh-user-center

我花名为含光本地调试即可更改为sh-user-center-hanguang

1、微服务名称全局定义

bootstrap.properties中

img

2、用户中心名称

img

3、@FeignClient使用

img

4、本地调试需要改动地方为

imgimg

小结

综上所述,个人推荐方案四,即可以统一规范微服务名称,又便于维护、调试、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值