spring_cloud

332 阅读4分钟

1.闲言

a.https://tool.lu/json json字符串转化
b.edit find search structurally idea查询项目中的内容
c.C:\Users\zouCongHui>curl http://localhost:9527/payment/lb --cookie
d."username=zzyy" 使用curl发送请求
e.C:\Windows\System32\drivers\etc host文件地址
f.部署eureka集群时defaultZone中为什么必须包含路径/eureka
    转自https://www.cnblogs.com/StarkBrothers/p/11974026.html

2.ribbo自己实现负载均衡

private int incrementAndGetModulo(int modulo) {
    int current;
    int next;
    do {
        current = this.nextServerCyclicCounter.get();
        next = (current + 1) % modulo;
    } while(!this.nextServerCyclicCounter.compareAndSet(current, next));
    return next;
}
//使用自旋锁完成下标的求解
private int incrementAndGetModulo(int modulo) {
   for(;;){
       int current=nextServerCyclicCounter.get();
       int next = (current+1)%module;
       if(nextServerCyclicCounter.compareAndSet(current,next))
       return next;
   }
}

2.1 使用ribbon步骤

1.自定义一个IRule
@Configuration
public class MySelfRule {//不要放在主启动类所在的包下
    @Bean
    public IRule myRule(){
        return new RandomRule();//替换默认的轮询规则 自带七种
    }
}
2.指明是使用自己的
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)
public class OrderMain80 {
    public static void main(String[] args) {
        SpringApplication.run(OrderMain80.class,args);
    }
}
3.配置给RestTemplate使用
@Configuration
public class ApplicationContextconfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

3.ribbon的超时控制

1.调用方的ribbon:
  建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的实际
  ReadTimeout: 5000
服务方TimeUnit.SECONDS.sleep(2);
测试:
1.配置为ReadTimeout: 5000 访问正常
2.不做任何配置结果为java.net.SocketTimeoutException: Read timed out
3.配置为ConnectTimeout: 5000结果为java.net.SocketTimeoutException: 
Read timed out
结论:ReadTimeout的时间要大于TimeUnit.SECONDS.sleep(2)才行
附:具体键值可以参考类CommonClientConfigKey,这个类涉及到常见的客户端
配置属性,另外一个类是DefaultClientConfigImpl,该类涵盖了CommonCl
ientConfigKey类的属性的默认值!!
2.hystrix 的超时时间默认为1000ms 
要设置ribbon的超时间小于Hystrix才能让重试机制在熔断前生效!!!!

4.压力测试Jmeter

注:tomcat的默认的工作线程数被访问B的接口打满了,没有多余的线程来分解
压力和处理访问量不高的A的接口

线程属性
  1、Number of Threads(users):线程数,相当于模拟的用户数量;
  2、Ramp-up Period(in seconds):达到指定线程需要的时间,例如线程
  数为100,时间设定为10s
  ,那么就是10s加载100个线程,每秒启动的线程数=100/10=10;
  3、Loop Count:如果填具体的数值,就是循环对应的次数;如果选择“Fo
  rever”,则一直执行下去,直到手动停止;
  4、Delay Thread creation until 
  needed:延迟线程创建,直到需要才创建。

5.两个配置register-with-eureka fetch-registry

1.使用feign时为什么让register-with-eureka为false有待研究
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
用Feign搭建服务消费者的时候,考虑消费者不需要再提供服务给其他服务,
所以不需要注册到注册中心(eureka)中。结果把registerWithEureka和fetc
hRegistry都关掉了,服务调用时报错:com.netflix.client.ClientExceptio
n: Load balancer does not have available server for client: XXXXXX。
看报错信息,负载均衡器没有找到可用的服务,Feign默认使用ribbon做负载 
均衡。不想注册,将registerWithEureka关掉就行了。启动类有eureka注解的
情况下(即是一个eureka客户端),fetchRegistry打开才能从eureka拉取服
务列表,ribbon才能做负载均衡。    
2.依赖说明    
因为feign底层是使用了ribbon作为负载均衡的客户端,而ribbon的负载均衡
也是依赖于eureka 获得各个服务的地址,所以要引入eureka-client。

6.区别@EnableEurekaClient @EnableDiscoveryClient

@EnableEurekaClient 只支持Eureka注册中心,@EnableDiscoveryClient 
支持Eureka、Zookeeper、Consul 这三个注册中心。

7.@LoadBalanced注解

1.在调用其他微服务的时候,通过服务实例名称就能进行调用其他的微服务,
而不是直接把要调用的微服务的ip和端口号写死在代码当中。
2.调用微服务的时候,可以实现负载均衡的算法,例如轮询,随机…
这个时候我们就需要具备多台被调用的微服务.

8.下载链接zipkin

http://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/2.12.9/
spring-cloud-alibaba
https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

9.docker 镜像下载 nacos

  a.进入官网https://hub.docker.com/
  b.输入关键字nacos

  c.选择对应版本的命令

  d.启动后进行如下配置 vi /usr/lib/sysctl.d/00-system.conf net.ipv4.ip_forward=1

e.重启network服务 
systemctl restart network
f.查看是否修改成功
sysctl net.ipv4.ip_forward
g.如果返回为“net.ipv4.ip_forward = 1”则表示成功了
结果失败了 用了windows