Springcloud 快速入门学习
之前有学过SpringCloud Alibaba,但是和 SpringCloud 还是有些差别的,所以,在这里快速学习一下。
SpringCloud 就是一套工具,帮助大家很容易地搭建出这么一个 集群和分布式的架子出来。
接下来的课程,站长就会从一个简单的单站系统开始,然后一步一步地把它改造成分布式+集群的系统。 在改造的过程中,就会逐步引入服务注册中心 Eureka, 客户端Ribbon,Feigh, 断路保护 Hystrix, 配置服务,消息总线等等概念和用法。
按部就班地跟着站长走一遍,差不多SpringCloud 的初步运用就能掌握啦。
一、创建父项目
在IDEA创建好了之后把 src
目录删了,因为父项目里用不到。
一下是 pom.xml 文件。
这个pom里有几点重要信息:
-
- 依赖 springboot 版本是 2.0.3
-
- 有基于 hutool 的依赖, hutool 是一个工具类,用起来很方便,这是 hutool 系列教材
-
- springcloud 用的版本是 Finchley
父模块的 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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.how2j.springcloud</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
<name>springcloud</name>
<description>springcloud</description>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.3.1</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 子模块 -->
<modules>
<module>eureka-server</module>
<module>product-data-service</module>
<module>product-view-service-ribbon</module>
<module>config-server</module>
</modules>
</project>
二、注册中心Eureka(微服务模块)
子项目的 pom.xml
引入 eureka 的服务端 spring-cloud-starter-netflix-eureka-server
jar 包,这个是给其他微服务提供注册的,和Nacos还不太一样。
<?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>com.how2j.springcloud</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.how2j.springcloud</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
启动类开启注册中心服务
EurekaServer 启动类。
这是一个 EurekaServer ,它扮演的角色是注册中心,用于注册各种微服务,以便于其他微服务找到和访问。 所以 Eureka 这个单词是 “找到啦” 的意思。
EurekaServer 本身就是个 Springboot 微服务, 所以它有 @SpringBootApplication 注解。
@EnableEurekaServer 表示这是个 EurekaServer
。
eureka-server/src/main/java/com/how2j/springcloud/EurekaServerApplication.java
package com.how2j.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
application.yml
配置文件,提供 eureka 的相关信息。
hostname: localhost 表示主机名称。
registerWithEureka:false. 表示是否注册到服务器。 因为它本身就是服务器,所以就无需把自己注册到服务器了。
fetchRegistry: false. 表示是否获取服务器的注册信息,和上面同理,这里也设置为 false。
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
自己作为服务器,公布出来的地址。 比如后续某个微服务要把自己注册到 eureka server, 那么就要使用这个地址: http://localhost:8761/eureka/
name: eurka-server表示这个微服务本身的名称是 eureka-server
application.yml
文件:
eureka:
instance:
hostname: 127.0.0.1 # 表示主机名称
client:
register-with-eureka: false # 表示是否注册到服务器。 因为它本身就是服务器,所以就无需把自己注册到服务器了
fetch-registry: false # 表示是否获取服务器的注册信息,和上面同理,这里也设置为 false。
service-url:
default-zone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 自己作为服务器,公布出来的地址
spring:
application:
name: eureka-server # 表示这个微服务本身的名称是 eureka-server
server:
port: 8761
启动并访问
运行 EurekaServerApplication,并访问:http://127.0.0.1:8761/
,这就是注册中心的管理界面,和nacos比起来界面比较丑。
三、注册数据(微服务模块)
1、创建子项目
创建子项目 product-data-service。
2、pom.xml
修改 pom.xml 为如下:spring-cloud-starter-netflix-eureka-client
表示这是个 eureka 客户端。spring-boot-starter-web
: 表示这是个web服务,会提供控制层
<?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>com.how2j.springcloud</groupId>
<artifactId>springcloud</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.how2j.springcloud</groupId>
<artifactId>product-data-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>product-data-service</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
3、启动类
启动类 ProductDataServiceApplication
开启 @EnableEurekaClient
注册中心客户端。
package com.how2j.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@EnableEurekaClient
@SpringBootApplication
public class ProductDataServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ProductDataServiceApplication.class, args);
}
}
application.yml
设置微服务的名称: product-data-service
设置注册中心的地址: http://localhost:8761/eureka/
, 与 eureka-server
中的配置 application.yml
遥相呼应
spring:
application:
name: product-data-service
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
server:
port: 8001
启动微服务
启动该微服务,则可以在 Eureka
看到刚刚注册的服务。
相关文章:
SpringCloud学习
为者常成,行者常至
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)