Springcloud 快速入门学习

之前有学过SpringCloud Alibaba,但是和 SpringCloud 还是有些差别的,所以,在这里快速学习一下。

SpringCloud 就是一套工具,帮助大家很容易地搭建出这么一个 集群和分布式的架子出来。

接下来的课程,站长就会从一个简单的单站系统开始,然后一步一步地把它改造成分布式+集群的系统。 在改造的过程中,就会逐步引入服务注册中心 Eureka, 客户端Ribbon,Feigh, 断路保护 Hystrix, 配置服务,消息总线等等概念和用法。
按部就班地跟着站长走一遍,差不多SpringCloud 的初步运用就能掌握啦。

一、创建父项目

在IDEA创建好了之后把 src 目录删了,因为父项目里用不到。
一下是 pom.xml 文件。
这个pom里有几点重要信息:

    1. 依赖 springboot 版本是 2.0.3
    1. 有基于 hutool 的依赖, hutool 是一个工具类,用起来很方便,这是 hutool 系列教材
    1. 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。
defaultZonehttp://${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比起来界面比较丑。
file

三、注册数据(微服务模块)

1、创建子项目

创建子项目 product-data-service。
file

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 看到刚刚注册的服务。
file


相关文章:
SpringCloud学习

为者常成,行者常至