SpringCloud 是一种生态 ,提供标准
SpringCloud Netflix 是框架 ,是SpringCloud的实现,是一种解决方案,是实现者
SpringCloud alibaba 是框架, 是SpringCloud的实现,是一种解决方案,是实现者
统一的模块管理
这个项目下没有代码,用来统一下面的模块版本,和依赖 ,不加载依赖,在自己模块中用到依赖,在进行加载
pom文件中 插件依照自己需要来引入
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>hello-spring-cloud-alibaba</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://www.funtl.com</url>
<name>hello-spring-cloud-alibaba</name>
<description>Demo project for Spring Boot</description>
<!--编译版本-->
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.report.outputEncoding>UTF-8</project.report.outputEncoding>
</properties>
<!--开源协议-->
<licenses>
<license>
<name>Apache 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<!--保留作者 -->
<developers>
<developer>
<id>spy</id>
<name>spy</name>
<email>spy@gmail.com</email>
</developer>
</developers>
<!--maven 管理依赖版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.funtl</groupId>
<artifactId>hello-spring-cloud-alibaba-dependencies</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--插件仓库和仓库 spring的私服 -->
<!--多环境配置 ,构建的时候用到的插件-->
<profiles>
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring-javaformat.version>0.0.12</spring-javaformat.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>io.spring.javaformat</groupId>
<artifactId>spring-javaformat-maven-plugin</artifactId>
<version>${spring-javaformat.version}</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
<systemPropertyVariables>
<java.security.egd>file:/dev/./urandom</java.security.egd>
<java.awt.headless>true</java.awt.headless>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
新建项目
在根部录下 新建一个文件夹 ,项目名为上面 配置的名字,然后新建pom 文件
注意版本坑 ,spring cloud 版本依赖一定要配套
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.funtl</groupId>
<artifactId>hello-spring-cloud-alibaba-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<url>http://www.funtl.com</url>
<!--springcloud2.0.x只能用G版本 1.0用 F版本
如果版本不配套会报错-->
<properties>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<spring-clound.alibaba.verion>0.9.0.RELEASE</spring-clound.alibaba.verion>
</properties>
<!--开源协议-->
<licenses>
<license>
<name>Apache 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<!--保留作者 -->
<developers>
<developer>
<id>spy</id>
<name>spy</name>
<email>spy@gmail.com</email>
</developer>
</developers>
</project>
元数据
描述数据的数据 ,就是数据的详细信息,多大,什么时间存的数据
Nacos
接入Nacos
1先准备一台服务器(虚拟机上新开一个)
2修改服务器的ip ,dns ,安装 docker compose
3clone nacos docker 然后 cd进入
4
5启动后 就直接 可以通过 提供的 端口号 ,和主机名称进行访问
6初始化 有可能报错,查看日志 有可能是数据库初始化 失败。重新启动就好
再新建别的项目
回去感知配置文件里的属性有没有
在java代码里 写配置 @Bean 就相当于
@LoadBalanced 就是实现负载均衡
url 就是服务提供者的 名称 ,服务使用者 ,就可以 实现 ,服务之前的通信,都可以在服务注册与使用中看到,restTemplate 是一个显示的http调用,实际开发中使用不到
Feign客户端
一个注解就解决上面需要的代码
在application 上 增加
@EnableFeignClients
实现类
测试类
负载均衡
自动负载均衡
直接 设置 ,允许创建多个实例的意思,然后因为启动服务端口号不能重复,所以可以通过查看端口号,证明自动开启了负载均衡 ,就会轮询的访问服务
config分布式配置中心
新建一个外部的配置 ,打开页面 ,新建配置 ,id 一定是 唯一的,然后需要加上后缀名,如果没有,可能会被自动加别的。然后 选择自己的配置 格式,复制进入代码 ,然后发布
加载优先级
这个注释可以读到配置文件中的值
动态刷新 配置文件
多环境配置
去找 prod 配置文件夹 ,在idea 切换环境
注意
运行jar 包报错,有可能是 远端的配置文件中不能有注释 ,然后运行上面的 jar指令
Sentinel
控制台
客户端
写一个自己的报错返回接口 ,当熔断的时候,返回一个固定的结果
@Component 类似与@service 语意化 更明确一些
指定自己的 fallback 。之前的代码不变
Dubbo
服务注册与发现
(观察者模式)
仅仅用他来解决 服务器端之间的通信
高速序列化
Kryo
成熟高效序列化 , 比上述四个 更新,更可用 ,针对java
Dubbo负载均衡
也是去制造多个实例
外部配置 和之前一模一样