SpringCloud 是一种生态 ,提供标准
SpringCloud Netflix 是框架 ,是SpringCloud的实现,是一种解决方案,是实现者
SpringCloud alibaba 是框架, 是SpringCloud的实现,是一种解决方案,是实现者

image.png
image.png
image.png

image.png

统一的模块管理

  1. 这个项目下没有代码,用来统一下面的模块版本,和依赖 ,不加载依赖,在自己模块中用到依赖,在进行加载
  2. pom文件中 插件依照自己需要来引入
  3. <?xml version="1.0" encoding="UTF-8"?>
  4. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <modelVersion>4.0.0</modelVersion>
  7. <parent>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-parent</artifactId>
  10. <version>2.2.0.RELEASE</version>
  11. <relativePath/> <!-- lookup parent from repository -->
  12. </parent>
  13. <groupId>com.example</groupId>
  14. <artifactId>hello-spring-cloud-alibaba</artifactId>
  15. <version>0.0.1-SNAPSHOT</version>
  16. <packaging>pom</packaging>
  17. <url>http://www.funtl.com</url>
  18. <name>hello-spring-cloud-alibaba</name>
  19. <description>Demo project for Spring Boot</description>
  20. <!--编译版本-->
  21. <properties>
  22. <java.version>1.8</java.version>
  23. <maven.compiler.source>${java.version}</maven.compiler.source>
  24. <maven.compiler.target>${java.version}</maven.compiler.target>
  25. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  26. <project.report.outputEncoding>UTF-8</project.report.outputEncoding>
  27. </properties>
  28. <!--开源协议-->
  29. <licenses>
  30. <license>
  31. <name>Apache 2.0</name>
  32. <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
  33. </license>
  34. </licenses>
  35. <!--保留作者 -->
  36. <developers>
  37. <developer>
  38. <id>spy</id>
  39. <name>spy</name>
  40. <email>spy@gmail.com</email>
  41. </developer>
  42. </developers>
  43. <!--maven 管理依赖版本-->
  44. <dependencyManagement>
  45. <dependencies>
  46. <dependency>
  47. <groupId>com.funtl</groupId>
  48. <artifactId>hello-spring-cloud-alibaba-dependencies</artifactId>
  49. <version>${project.version}</version>
  50. <type>pom</type>
  51. <scope>import</scope>
  52. </dependency>
  53. </dependencies>
  54. </dependencyManagement>
  55. <!--插件仓库和仓库 spring的私服 -->
  56. <!--多环境配置 ,构建的时候用到的插件-->
  57. <profiles>
  58. <profile>
  59. <id>default</id>
  60. <activation>
  61. <activeByDefault>true</activeByDefault>
  62. </activation>
  63. <properties>
  64. <spring-javaformat.version>0.0.12</spring-javaformat.version>
  65. </properties>
  66. <build>
  67. <plugins>
  68. <plugin>
  69. <groupId>io.spring.javaformat</groupId>
  70. <artifactId>spring-javaformat-maven-plugin</artifactId>
  71. <version>${spring-javaformat.version}</version>
  72. </plugin>
  73. <plugin>
  74. <groupId>org.apache.maven.plugins</groupId>
  75. <artifactId>maven-surefire-plugin</artifactId>
  76. <configuration>
  77. <includes>
  78. <include>**/*Tests.java</include>
  79. </includes>
  80. <excludes>
  81. <exclude>**/Abstract*.java</exclude>
  82. </excludes>
  83. <systemPropertyVariables>
  84. <java.security.egd>file:/dev/./urandom</java.security.egd>
  85. <java.awt.headless>true</java.awt.headless>
  86. </systemPropertyVariables>
  87. </configuration>
  88. </plugin>
  89. </plugins>
  90. </build>
  91. </profile>
  92. </profiles>
  93. </project>

新建项目

  1. 在根部录下 新建一个文件夹 ,项目名为上面 配置的名字,然后新建pom 文件
  2. 注意版本坑 ,spring cloud 版本依赖一定要配套
  3. <?xml version="1.0" encoding="UTF-8" ?>
  4. <project xmlns="http://maven.apache.org/POM/4.0.0"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  7. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  8. <modelVersion>4.0.0</modelVersion>
  9. <groupId>com.funtl</groupId>
  10. <artifactId>hello-spring-cloud-alibaba-dependencies</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <packaging>pom</packaging>
  13. <url>http://www.funtl.com</url>
  14. <!--springcloud2.0.x只能用G版本 1.0用 F版本
  15. 如果版本不配套会报错-->
  16. <properties>
  17. <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
  18. <spring-clound.alibaba.verion>0.9.0.RELEASE</spring-clound.alibaba.verion>
  19. </properties>
  20. <!--开源协议-->
  21. <licenses>
  22. <license>
  23. <name>Apache 2.0</name>
  24. <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
  25. </license>
  26. </licenses>
  27. <!--保留作者 -->
  28. <developers>
  29. <developer>
  30. <id>spy</id>
  31. <name>spy</name>
  32. <email>spy@gmail.com</email>
  33. </developer>
  34. </developers>
  35. </project>

image.png

元数据

描述数据的数据 ,就是数据的详细信息,多大,什么时间存的数据

Nacos

image.png

接入Nacos

1先准备一台服务器(虚拟机上新开一个)
2修改服务器的ip ,dns ,安装 docker compose
3clone nacos docker 然后 cd进入
4image.png
5启动后 就直接 可以通过 提供的 端口号 ,和主机名称进行访问
6初始化 有可能报错,查看日志 有可能是数据库初始化 失败。重新启动就好

再新建别的项目

image.png
回去感知配置文件里的属性有没有

image.png
image.png
在java代码里 写配置 @Bean 就相当于配置
@LoadBalanced 就是实现负载均衡

image.png
url 就是服务提供者的 名称 ,服务使用者 ,就可以 实现 ,服务之前的通信,都可以在服务注册与使用中看到,restTemplate 是一个显示的http调用,实际开发中使用不到

Feign客户端

image.png
一个注解就解决上面需要的代码
在application 上 增加
@EnableFeignClients

实现类

image.png
测试类
image.png

负载均衡

自动负载均衡
image.png
直接 设置 ,允许创建多个实例的意思,然后因为启动服务端口号不能重复,所以可以通过查看端口号,证明自动开启了负载均衡 ,就会轮询的访问服务

config分布式配置中心

image.png

新建一个外部的配置 ,打开页面 ,新建配置 ,id 一定是 唯一的,然后需要加上后缀名,如果没有,可能会被自动加别的。然后 选择自己的配置 格式,复制进入代码 ,然后发布
image.png

加载优先级

image.png

这个注释可以读到配置文件中的值
image.png
image.png动态刷新 配置文件

多环境配置

image.png
image.png
去找 prod 配置文件夹 ,在idea 切换环境
image.png

注意

运行jar 包报错,有可能是 远端的配置文件中不能有注释 ,然后运行上面的 jar指令

Sentinel

image.png

控制台

image.png

客户端

image.png
image.png

写一个自己的报错返回接口 ,当熔断的时候,返回一个固定的结果
@Component 类似与@service 语意化 更明确一些
image.png

image.png
指定自己的 fallback 。之前的代码不变

Dubbo

image.png

image.png

服务注册与发现

(观察者模式)
image.png
image.png
仅仅用他来解决 服务器端之间的通信

高速序列化

image.png

Kryo

成熟高效序列化 , 比上述四个 更新,更可用 ,针对java

image.pngimage.png

Dubbo负载均衡

也是去制造多个实例
image.png
image.png

外部配置 和之前一模一样

后端解决跨域cors

image.png
image.png