springcloud总结

发布于:2024-04-01 ⋅ 阅读:(93) ⋅ 点赞:(0)

Nacos: 注册中心,解决服务注册与发现
OpenFeign:声明式的HTTP客户端,服务远程调用(内置了负载均衡的功能)
Nacos:配置中心,中心化管理配置文件
Sentinel:微服务流量卫兵,以流量为入口,保护微服务,防止出现服务雪崩
Gateway: 微服务网关,服务集群的入口,路由转发以及负载均衡(结合Sentinel)
Sleuth: 链路追踪,链路快速梳理、故障定位等
Seata: 分布式事务解决方案

为什么使用链路追踪

【问题】
1、链路梳理难:无法清晰地看到整个调用链路
2、故障难定位:无法快速定位到故障点、无法快速定位哪个环节比较费时

sleuth目前并不是对所有调用访问都可以做链路追踪,它目前支持的有:rxjava、feign、quartz、RestTemplate、zuul、hystrix、grpc、kafka、Opentracing、redis、Reator、circuitbreaker、spring的Scheduled。国内用的比较多的dubbo,sleuth无法对其提供支持。

  1. 引入依赖
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

2.编写配置

spring:
	sleuth:
		sampler:
			rate: 100 # 指定采样比例,默认10%

3.集成zipkin

虽然我们已经可以通过Trace ID来跟踪整体请求链路了,但是我们还是得去各个系统中捞取日志。在并发较高得时候,日志是海量的,这个时候我们可以借助Zipkin来代替我们完成日志获取与分析。

  • 引入依赖
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
  • 配置文件
spring:
	zipkin:
		base-url: http://localhost:9999 # zipkin的地址
		discovery-client-enabled: false # 禁用往nacos里注册
  • 安装Zipkin

    只需要下载Zipkin的jar包,并启动即可

  • 启动

java -jar zipkin-server-2.12.9-exec.jar --server.port=9999

踩坑:

  1. 集成nacos注册中心时候报错

    添加依赖
    
     		<dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>2.2.9.RELEASE</version>
            </dependency>
    
    配置文件
    
    spring:
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
      application:
        name: testt
    
    启动类加注解:
    

    @EnableDiscoveryClient

    报错:
    > 19:05:22.074 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@e9c588a
    19:05:22.668 [restartedMain] ERROR org.springframework.boot.SpringApplication - Application run failed
    java.lang.NoClassDefFoundError: org/springframework/boot/Bootstrapper
    

nacos版本和springboot 版本不一致,更换匹配版本启动即可

2.集成feign报错

  • 未解决

No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?

步骤:

  • 在两个服务中都加入依赖
 		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-okhttp</artifactId>
            <version>8.18.0</version>
        </dependency>
  • 被调用服务启动类加上注解@EnableFeignClients
  • 调用服务增加接口
@FeignClient(name = "blog")//这里是被调用的服务名称
public interface CmsPageClient {
    @GetMapping("/admin/gg")//路径
    String ggg(@PathVariable("id") String id);
}
  	@Resource
    private CmsPageClient cmsPageClient;
    @GetMapping("/tttt")
    public String tt(){
        return cmsPageClient.ggg("111111111");
    }

为什么可以直接实例化接口呢?feign使用了动态代理类

再加上反射拿到方法的注解上的路径等,在代理中实现了路径的拼接


本文含有隐藏内容,请 开通VIP 后查看