SpringCloudSpringCloud 快速入门

Posted H__D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloudSpringCloud 快速入门相关的知识,希望对你有一定的参考价值。

SpringCloud简介

  Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。

  官网:https://spring.io/projects/spring-cloud

  特点

  Spring Cloud专注于为典型的用例和可扩展性机制(包括其他用例)提供良好的开箱即用体验。

  • 分布式/版本化配置

  • 服务注册和发现

  • 路由

  • 服务到服务的呼叫

  • 负载均衡

  • 断路器

  • 全局锁

  • 领导选举和集群状态

  • 分布式消息传递

  Spring Cloud 架构图

  

SpringCloud项目搭建

  学习SpringCloud先要有,SpringBoot的相关知识,参考【SpringBoot】SpringBoot快速入门(一)

  SpringBoot 是基于 SpringFramework 来构建的,SpringFramework 是一种 J2EE 的框架,SpringBoot 是一种快速构建 Spring 应用,SpringCloud 是构建 Spring Boot 分布式环境,也就是常说的云应用,SpringBoot 中流砥柱,承上启下  

  

  本例项目架构

  

  环境准备

  1)JDK 环境必须是 1.8 及以上,本例使用版本:1.8.0_181

  2)Maven 项目管理工具,3.6.0及以上版本,本例使用版本:3.6.3

  3)开发工具使用 IDEA

搭建项目父工程

  1、新建一个maven空工程test-springcloud

    

  2、编写pom文件,引入项目所需要依赖的包

    本例使用的SpringBoot版本是2.2.5.RELEASE,SpringCloud版本是Hoxton.SR3

    使用其他版本,需要注意SpringBoot和SpringCloud版本的兼容问题

 1 <!-- spring boot -->
 2 <dependency>
 3     <groupId>org.springframework.boot</groupId>
 4     <artifactId>spring-boot-dependencies</artifactId>
 5     <version>2.2.5.RELEASE</version>
 6     <type>pom</type>
 7     <scope>import</scope>
 8 </dependency>
 9 <!-- spring cloud -->
10 <dependency>
11     <groupId>org.springframework.cloud</groupId>
12     <artifactId>spring-cloud-dependencies</artifactId>
13     <version>Hoxton.SR3</version>
14     <type>pom</type>
15     <scope>import</scope>
16 </dependency>

    完整pom文件如下:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0"
  3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <groupId>com.test</groupId>
  8     <artifactId>test-springcloud</artifactId>
  9     <version>1.0-SNAPSHOT</version>
 10     <packaging>pom</packaging>
 11 
 12 
 13     <modules>
 14         <module>test-springcloud-eureka-server8761</module>
 15         <module>test-springcloud-order8000</module>
 16         <module>test-springcloud-provider-payment8001</module>
 17     </modules>
 18 
 19 
 20     <!-- 统一管理jar包版本 -->
 21     <properties>
 22         <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
 23         <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
 24         <!--        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>-->
 25         <mybatis-spring-boot.version>2.1.2</mybatis-spring-boot.version>
 26         <mysql.version>8.0.12</mysql.version>
 27         <druid.version>1.1.21</druid.version>
 28         <lombok.version>1.18.12</lombok.version>
 29         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 30         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 31         <java.version>1.8</java.version>
 32     </properties>
 33 
 34 
 35     <!-- 依赖管理:子模块继承后,提供作用:锁定版本 + 子module 不用写 version -->
 36     <dependencyManagement>
 37         <dependencies>
 38             <!-- spring boot -->
 39             <dependency>
 40                 <groupId>org.springframework.boot</groupId>
 41                 <artifactId>spring-boot-dependencies</artifactId>
 42                 <version>${spring-boot.version}</version>
 43                 <type>pom</type>
 44                 <scope>import</scope>
 45             </dependency>
 46             <!-- spring cloud -->
 47             <dependency>
 48                 <groupId>org.springframework.cloud</groupId>
 49                 <artifactId>spring-cloud-dependencies</artifactId>
 50                 <version>${spring-cloud.version}</version>
 51                 <type>pom</type>
 52                 <scope>import</scope>
 53             </dependency>
 54             <!-- spring cloud alibaba -->
 55             <!--            <dependency>-->
 56             <!--                <groupId>com.alibaba.cloud</groupId>-->
 57             <!--                <artifactId>spring-cloud-alibaba-dependencies</artifactId>-->
 58             <!--                <version>${spring-cloud-alibaba.version}</version>-->
 59             <!--                <type>pom</type>-->
 60             <!--                <scope>import</scope>-->
 61             <!--            </dependency>-->
 62 
 63             <!-- mybatis -->
 64             <dependency>
 65                 <groupId>org.mybatis.spring.boot</groupId>
 66                 <artifactId>mybatis-spring-boot-starter</artifactId>
 67                 <version>${mybatis-spring-boot.version}</version>
 68             </dependency>
 69 
 70             <!-- mysql -->
 71             <dependency>
 72                 <groupId>mysql</groupId>
 73                 <artifactId>mysql-connector-java</artifactId>
 74                 <version>${mysql.version}</version>
 75             </dependency>
 76 
 77             <!-- druid -->
 78             <dependency>
 79                 <groupId>com.alibaba</groupId>
 80                 <artifactId>druid-spring-boot-starter</artifactId>
 81                 <version>${druid.version}</version>
 82             </dependency>
 83 
 84             <!-- lombok -->
 85             <dependency>
 86                 <groupId>org.projectlombok</groupId>
 87                 <artifactId>lombok</artifactId>
 88                 <version>${lombok.version}</version>
 89             </dependency>
 90 
 91             <!-- test -->
 92             <dependency>
 93                 <groupId>org.springframework.boot</groupId>
 94                 <artifactId>spring-boot-starter-test</artifactId>
 95                 <version>${spring-boot.version}</version>
 96                 <scope>test</scope>
 97                 <exclusions>
 98                     <exclusion>
 99                         <groupId>org.junit.vintage</groupId>
100                         <artifactId>junit-vintage-engine</artifactId>
101                     </exclusion>
102                 </exclusions>
103             </dependency>
104         </dependencies>
105     </dependencyManagement>
106 
107     <!-- SpringBoot打包插件,可以将代码打包成一个可执行的jar包 -->
108     <build>
109         <finalName>${project.artifactId}</finalName>
110         <plugins>
111             <plugin>
112                 <groupId>org.apache.maven.plugins</groupId>
113                 <artifactId>maven-compiler-plugin</artifactId>
114                 <configuration>
115                     <source>${java.version}</source>
116                     <target>${java.version}</target>
117                 </configuration>
118             </plugin>
119             <plugin>
120                 <groupId>org.springframework.boot</groupId>
121                 <artifactId>spring-boot-maven-plugin</artifactId>
122                 <version>${spring-boot.version}</version>
123                 <configuration>
124                     <fork>true</fork>
125                     <addResources>true</addResources>
126                 </configuration>
127             </plugin>
128         </plugins>
129     </build>
130 </project>
131 
132 pom.xml
pom.xml

  3、项目结构图如下:

    

搭建Eureka注册中心

  即Eureka的服务端

  1、在父项目上,new module 新建一个模块Eureka注册中心,及Eureka服务端 test-springboot-eureka-server8761

  2、编写pom.xml文件

    Eureka服务端依赖如下:

1 <!-- eureka server -->
2 <dependency>
3     <groupId>org.springframework.cloud</groupId>
4     <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
5 </dependency>

    完整pom.xml文件如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>test-springcloud-eureka-server8761</artifactId>
13 
14     <dependencies>
15         <!-- eureka server -->
16         <dependency>
17             <groupId>org.springframework.cloud</groupId>
18             <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
19         </dependency>
20 
21         <!-- spring boot -->
22         <dependency>
23             <groupId>org.springframework.boot</groupId>
24             <artifactId>spring-boot-starter-web</artifactId>
25         </dependency>
26         <dependency>
27             <groupId>org.springframework.boot</groupId>
28             <artifactId>spring-boot-starter-actuator</artifactId>
29         </dependency>
30         <dependency>
31             <groupId>org.springframework.boot</groupId>
32             <artifactId>spring-boot-devtools</artifactId>
33             <scope>runtime</scope>
34             <optional>true</optional>
35         </dependency>
36 
37         <dependency>
38             <groupId>org.springframework.boot</groupId>
39             <artifactId>spring-boot-starter-test</artifactId>
40             <scope>test</scope>
41         </dependency>
42 
43     </dependencies>
44 
45     <build>
46         <finalName>test-springcloud-eureka-server8761</finalName>
47     </build>
48 </project>
pom.xml

  3、编写application.yml配置文件

 1 # 端口
 2 server:
 3   port: 8761
 4 
 5 spring:
 6   application:
 7     name: cloud-eureka-server
 8 
 9 # Eureka配置
10 eureka:
11   instance:
12     # eureka服务端的实例名称
13     hostname: localhost
14   client:
15     # false表示不向注册中心注册自己
16     register-with-eureka: false
17     # false表示自己端就是注册中心,职责就是维护服务实例,并不需要去检查服务
18     fetch-registry: false
19     # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
20     service-url:
21       defaultZone: http://localhost:8761/eureka

   4、编辑SpringBoot启动类EurekaMain8761.java,并使用@EnableEurekaServer