跳至主要內容
SpringCloud使用nacos多人开发负载调用问题实践

1、问题描述

当我们使用springcloud+nacos架构时,由于使用nacos进行负载的原因,组内小伙伴经常调用到其他人的电脑。

针对此问题我们可以采用的方案:

  • (方案1)利用nacos的特性,进行区分namespace或者group,每个人用不同的namespace或者group。该方式需要每个开发人员改yml文件且不能提交,比较麻烦。
  • (方案2)不使用openfeign不使用gateway,使用restTemplate,调用前进行判断是否为开发环境,开发环境使用localhost。
  • (方案3)该方案我目前采用的,无需每个人进行特别的配置。首先我们使用openfeign且使用gateway;其中nacos的namespace区分dev、test、hotfix、prod;group大家都是用的默认的DEFAULT_GROUP。需要修改的是gateway配置和增加openfeign参数
    若有更好的方法,也请分享我,万分感谢~
    下面详细介绍方案2和方案3:

zheng大约 2 分钟springSpringCloud
Kafka的简单使用

1、安装kafka

http://kafka.apache.org/quickstart (linux版)

windows版:
首先cmd到kafka的bin下
其中启动内置的zk用:zookeeper-server-start.bat D:\environment\kafka_2.12-2.3.0\config\zookeeper.properties
启动Kafka用:kafka-server-start.bat D:\environment\kafka_2.12-2.3.0\config\server.properties


zheng大约 2 分钟springSpringCloud
SpringCloud使用Feign+Ribbon+Hystrix

1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

zheng大约 1 分钟springSpringCloud
SpringCloud使用Feign+Ribbon

1、引入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

zheng大约 2 分钟springSpringCloud
SpringCloud使用Feign

1、引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

zheng小于 1 分钟springSpringCloud
SpringCloud使用RestTemplate

1、引入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

zheng小于 1 分钟springSpringCloud
SpringCloud异常配置

1.【强制】Java 类库中定义的可以通过预检查方式规避的 RuntimeException 异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBoundsException 等等。
说明:无法通过预检查的异常除外,比如,在解析字符串形式的数字时,不得不通过 catch NumberFormatException 来实现。
正例:if (obj != null) {...}
反例:try { obj.method(); } catch (NullPointerException e)


郑天祺大约 4 分钟springSpringCloud
SpringCloud Hystrix参数配置

Hystrix修改默认配置有两种方式,注解参数注入,和application.yml配置文件配置。

1、方法一:注解参数注入

    @RequestMapping(value = "/helloHystrixA/{string}", method = RequestMethod.GET)
    @HystrixCommand(fallbackMethod = "testFallback", // 请求失败降级回调方法,值为方法名,不需要括号
        commandProperties = {// 针对单个方法的配置
            @HystrixProperty(name = "circuitBreaker.enabled", value = "true"), // 开启熔断器,可不加默认为true
            @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"), // 请求错误超过50%,开启熔断器
            @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"), // 一个周期(十秒)内超过10个请求才进行进行容错率判断
            @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),// 开启熔断器后过10秒再尝试访问
        })
    public String helloHystirxA(@PathVariable String string) {
        return "Nacos服务发现:远端调用成功! result="
            + restTemplate.getForObject("http://nacos.provider.demo/hello/" + string, String.class);


zheng大约 2 分钟springSpringCloud
SpringCloud Ribbon参数配置

Ribbon策略类型

image-20201214123508379
image-20201214123508379

Ribbon负载均衡策略为轮询,如果要修改默认策略 ,有两种方法,分别是创建配置类,和配置application.yml。

方法一:创建配置类

 @Configuration  
public class MyRibbonConfig {
    @Bean
    public IRule ribbonRule() {
        //随机策略
        return new RandomRule();
    }
}
然后在启动类上加注解:
@RibbonClient(name = "nacos.provider.demo", configuration = MyRibbonConfig.class)  //name为服务提供者名称


zheng小于 1 分钟springSpringCloud
SpringCloud client配置

1、pom.xml添加starter依赖

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-alibaba-nacos-config -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

zheng小于 1 分钟springSpringCloud
2