小细节:在服务者没加requestBody注解的情况下,消费者插入会出现以下情况:
http://localhost/consumer/payment/create?serial=tttt
提示插入成功,但进入数据库后并没有出现插入成功的情况,新增数据为null,这就是没加requestbody注解的原因,加上即可解决问题
小提示:service替代了run dashboard成为了启动多项目的配置
可以看到,系统中entities层在两个模块中都有出现,代码一模一样,所以需要对项目进行重构,提取出来
创建maven新模块:cloud-api-commons
修改pom.xml:
<?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">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.xs.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-api-commons</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- <version>2.0.4.RELEASE</version>-->
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>创建com/xs/springcloud/entities的路径,将其他包的entities复制过来
然后需要打包到本体库以供其他库使用,在右边的maven栏设置跳过测试,刷新一下,然后clean,如果没问题的话就install
接着删除另两个模块的entities文件夹,在两个模块的pom.xml中引入以下依赖:
<dependency>
<groupId>com.xs.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>发现提示错误消失,即代表引入成功
http://localhost/consumer/payment/create?serial=2333正常
http://localhost/consumer/payment/get/1 正常
系统重构完成
以上为最基础入门内容(14集及之前),以下进入正式课程
为什么要注册中心?
类似于医院,私人高级医院可以一对一服务,但公立医院人多的时候必须有个挂号门诊的过程。注册中心可以进行调度,协调,管理等等
什么是服务治理?
微服务架构的缺点中最主要的就是由于微服务数量众多导致维护成本巨大,服务治理为解决问题而产生的。服务治理的作用是让维护人员从人工维护中解放出来,由服务自行维护,微服务作为服务提供方主动向服务治理中心注册,服务的消费主通过服务治理中心查询需要的服务并进行调用。
一般情况下服务提供者为集群,注册中心也为集群,不集群万一出现宕机情况就会出现很大问题(单点故障)
什么是服务注册:
服务在启动的时候,将服务注册进注册中心(服务知道注册中心的相关信息)
什么是服务发现:
服务提供一个接口,对外暴露,有服务发现需求者可以通过该接口查询服务信息
Eureka(停止更新,但很多老项目在使用)
Eureka就好像是中间商,公司找他提供服务,他也会监测公司的动态变化。而消费者找他寻求服务
Eureka组件:
Eureka Server:提供注册服务
Eureka Client:通过注册中心访问
1建立cloud-eureka-server7001
2改pom.xml
<?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">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.xs.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-eureka-server7001</artifactId>
<dependencies>
<!-- 服务注册中心的服务端 eureka-server -->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>com.xs.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- <version>2.0.4.RELEASE</version>-->
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>3.写yml
server:
port: 7001
eureka:
instance:
hostname: localhost
client:
# 不会自己注册自己
register-with-eureka: false
# 不需要检索服务,我自己就是服务中心
fetch-registry: false
service-url:
# 交互地址依赖于这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/4.写主启动类
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class,args);
}
}5.因为是注册中心,所以不需要写业务类,启动项目后输入:http://localhost:7001/,看到页面即成功
拿之前的8001进行注册,在pom.XML中引入客户端依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>接着加入yml的内容:
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:7001/eureka主启动类加入以下注释:
@EnableEurekaClient
即可启动(记得要先启动server),红字先不管(自我保护机制)
80以同样的方式入驻
http://localhost/consumer/payment/get/1 测试依然无问题
以上为单机版
Eureka集群原理:
一句话:相互注册,相互守望