分布式框架——SpringCloud学习一(基于尚硅谷周阳2020最新版SpringCloud教程1-14集) - Go语言中文社区

分布式框架——SpringCloud学习一(基于尚硅谷周阳2020最新版SpringCloud教程1-14集)


微服务架构

SpringCloud

  1. 官网入口:SpringCloud
  2. SpringCloud=分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶
  3. 包含技术:
  • 服务注册与发现 —— Eureka
  • 服务调用 —— Ribbon、Feign
  • 服务熔断与降级 —— Hystrix
  • 服务网关 —— Zuul
  • 服务分布式配置 —— SpringCloud Config
  • 服务开发 —— SpringBoot
  • 负载均衡
  • 服务消息队列
  • 服务监控
  • 全链路追踪
  • 自动化构建部署
  • 服务定时任务调度操作
  1. 组件迭代升级
  • 注册中心:
    • (X)Eureka
    • (√)Zookeeper、Consul、Nacos
  • 服务调用:
    • (X)Ribbon
    • (√)LoadBalance
  • 服务调用2:
    • (X)Feign
    • (√)OpenFeign
  • 服务降级:
    • (X)Hystrix
    • (√)Resilience4j、Alibaba Sentinel
  • 服务网关:
    • (X)Zuul
    • (√)SpringCloud Gateway
  • 服务配置:
    • (X)Config
    • (√)Nacos
  • 服务总线:
    • (X)Bus
    • (√)Nacos

版本选择

  1. SpringBoot版本选择
  2. SpringCloud版本选择
  3. 二者间版本依赖关系
    在这里插入图片描述
  4. 更详细的版本选择:查看
{
	"git": {
		"commit": {
			"time": "2020-03-26T13:30:01Z",
			"id": "ab4aa32"
		},
		"branch": "ab4aa3207fc1032aee8542fb119539d5b1f48c59"
	},
	"build": {
		"version": "0.0.1-SNAPSHOT",
		"artifact": "start-site",
		"name": "start.spring.io website",
		"versions": {
			"initializr": "0.9.0.BUILD-SNAPSHOT",
			"spring-boot": "2.2.6.RELEASE"
		},
		"group": "io.spring.start",
		"time": "2020-03-26T13:31:28.994Z"
	},
	"bom-ranges": {
		"azure": {
			"2.0.10": "Spring Boot >=2.0.0.RELEASE and <2.1.0.RELEASE",
			"2.1.7": "Spring Boot >=2.1.0.RELEASE and <2.2.0.M1",
			"2.2.0": "Spring Boot >=2.2.0.M1"
		},
		"codecentric-spring-boot-admin": {
			"2.0.6": "Spring Boot >=2.0.0.M1 and <2.1.0.M1",
			"2.1.6": "Spring Boot >=2.1.0.M1 and <2.2.0.M1",
			"2.2.1": "Spring Boot >=2.2.0.M1"
		},
		"solace-spring-boot": {
			"1.0.0": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1"
		},
		"solace-spring-cloud": {
			"1.0.0": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1"
		},
		"spring-cloud": {
			"Finchley.M2": "Spring Boot >=2.0.0.M3 and <2.0.0.M5",
			"Finchley.M3": "Spring Boot >=2.0.0.M5 and <=2.0.0.M5",
			"Finchley.M4": "Spring Boot >=2.0.0.M6 and <=2.0.0.M6",
			"Finchley.M5": "Spring Boot >=2.0.0.M7 and <=2.0.0.M7",
			"Finchley.M6": "Spring Boot >=2.0.0.RC1 and <=2.0.0.RC1",
			"Finchley.M7": "Spring Boot >=2.0.0.RC2 and <=2.0.0.RC2",
			"Finchley.M9": "Spring Boot >=2.0.0.RELEASE and <=2.0.0.RELEASE",
			"Finchley.RC1": "Spring Boot >=2.0.1.RELEASE and <2.0.2.RELEASE",
			"Finchley.RC2": "Spring Boot >=2.0.2.RELEASE and <2.0.3.RELEASE",
			"Finchley.SR4": "Spring Boot >=2.0.3.RELEASE and <2.0.999.BUILD-SNAPSHOT",
			"Finchley.BUILD-SNAPSHOT": "Spring Boot >=2.0.999.BUILD-SNAPSHOT and <2.1.0.M3",
			"Greenwich.M1": "Spring Boot >=2.1.0.M3 and <2.1.0.RELEASE",
			"Greenwich.SR5": "Spring Boot >=2.1.0.RELEASE and <2.1.14.BUILD-SNAPSHOT",
			"Greenwich.BUILD-SNAPSHOT": "Spring Boot >=2.1.14.BUILD-SNAPSHOT and <2.2.0.M4",
			"Hoxton.SR3": "Spring Boot >=2.2.0.M4 and <2.3.0.BUILD-SNAPSHOT",
			"Hoxton.BUILD-SNAPSHOT": "Spring Boot >=2.3.0.BUILD-SNAPSHOT"
		},
		"spring-cloud-alibaba": {
			"2.2.0.RELEASE": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1"
		},
		"spring-cloud-services": {
			"2.0.3.RELEASE": "Spring Boot >=2.0.0.RELEASE and <2.1.0.RELEASE",
			"2.1.7.RELEASE": "Spring Boot >=2.1.0.RELEASE and <2.2.0.RELEASE",
			"2.2.3.RELEASE": "Spring Boot >=2.2.0.RELEASE and <2.3.0.M1"
		},
		"spring-statemachine": {
			"2.0.0.M4": "Spring Boot >=2.0.0.RC1 and <=2.0.0.RC1",
			"2.0.0.M5": "Spring Boot >=2.0.0.RC2 and <=2.0.0.RC2",
			"2.0.1.RELEASE": "Spring Boot >=2.0.0.RELEASE"
		},
		"vaadin": {
			"10.0.17": "Spring Boot >=2.0.0.M1 and <2.1.0.M1",
			"14.1.21": "Spring Boot >=2.1.0.M1"
		}
	},
	"dependency-ranges": {
		"okta": {
			"1.2.1": "Spring Boot >=2.1.2.RELEASE and <2.2.0.M1",
			"1.4.0": "Spring Boot >=2.2.0.M1"
		},
		"mybatis": {
			"2.0.1": "Spring Boot >=2.0.0.RELEASE and <2.1.0.RELEASE",
			"2.1.2": "Spring Boot >=2.1.0.RELEASE"
		},
		"geode": {
			"1.2.5.RELEASE": "Spring Boot >=2.2.0.M5 and <2.3.0.M1",
			"1.3.0.M3": "Spring Boot >=2.3.0.M1 and <2.3.0.BUILD-SNAPSHOT",
			"1.3.0.BUILD-SNAPSHOT": "Spring Boot >=2.3.0.BUILD-SNAPSHOT"
		},
		"camel": {
			"2.22.4": "Spring Boot >=2.0.0.M1 and <2.1.0.M1",
			"2.24.3": "Spring Boot >=2.1.0.M1 and <2.2.0.M1",
			"3.1.0": "Spring Boot >=2.2.0.M1"
		}
	}
}
  1. 版本确定
  • SpringCloud:Hoxton.SR3 / SR1
  • SpringBoot:2.2.5.RELEASE / 2.2.2
  • SpringCloud Alibaba:2.1.0.RELEASE
  • Java:Java8
  • Maven:3.5及以上
  • MySQl:5.7及以上

创建父工程

  1. 修改pom.xml
<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.cc.springcloud</groupId>
	<artifactId>cloud2020</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- 所有的父级项目的packaging都为pom,packaging默认类型jar类型,如果不做配置,maven会将该项目打成jar -->
	<packaging>pom</packaging>
	
	<name>cloud2020</name>
	<url>http://maven.apache.org</url>
	
	<!-- 统一管理jar -->
  	<properties>
   		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   		<maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>8.0.18</mysql.version>
        <druid.verison>1.1.16</druid.verison>
        <mybatis.spring.boot.verison>1.3.0</mybatis.spring.boot.verison>

  	</properties>
  	
  	<!-- dependencyManagement作用:锁定版本+子模块不用再写groupId、version -->
  	<!-- 只声明依赖的版本号、作用域,而不引入 -->
  	<!-- 子项目声明依赖,并且没有指定具体版本时,才会从父项目中继承
  		若子项目指定版本号,会使用子项目指定的jar包版本 	-->
  	<dependencyManagement>
  		<dependencies>
  			<!--spring boot 2.2.5-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud Hoxton.SR3-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- MySql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- Druid连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.verison}</version>
            </dependency>
            <!-- mybatis-springboot整合 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.verison}</version>
            </dependency>
            <!--lombok工具,使用注解代替get/set方法等代码-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
            <!--junit单元测试-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!-- log4j日志 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
  		</dependencies>
  	</dependencyManagement>
 </project>
  1. maven clean install

创建子工程

开启热部署

  1. 子工程添加devtools依赖
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-devtools</artifactId>
		<scope>runtime</scope>
		<optional>true</optional>
	</dependency>
  1. 父工程添加maven编译插件
	<build>
	<plugins>
    	<plugin>
        	<groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
				<fork>true</fork>
     			<addResources>true</addResources> 
            </configuration>
    	</plugin>
    </plugins>
    </build>

在这里插入图片描述

在这里插入图片描述

  1. 重启IDEA

cloud-provider-payment8001

  1. 新建maven工程
  2. 修改pom.xml
  3. 编写application.yml
  4. 编写主启动类PaymentMain8001.java
  5. 编写业务类
  6. 测试

cloud-consumer-order80

  1. 新建maven工程
  2. 修改pom.xml,注意不要添加数据库相关的jar
<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>
		<groupId>com.cc.springcloud</groupId>
		<artifactId>cloud2020</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
  	<modelVersion>4.0.0</modelVersion>

  	<artifactId>cloud-consumer-order80</artifactId>

	<name>cloud-consumer-order80</name>
	<url>http://maven.apache.org</url>
	
	<dependencies>
		<!-- 引入公共模块 -->
		<dependency>
			<groupId>com.cc.springcloud</groupId>
			<artifactId>cloud-api-commons</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- 健康监控 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
        <!-- 热部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		
	
	</dependencies>

</project>
  1. 编写application.yml
server:
  # 浏览器访问网址默认就是80端口
  port: 80
  1. 编写主启动类OrderMain80.java
  2. 编写业务类
  • entities
  • RestTemplate
  • config配置类
@Configuration
public class ApplicationContextConfig {	
	@Bean
	public RestTemplate getrRestTemplate() {
		return new RestTemplate();
	}
}
  • controller
@RestController
@Slf4j
public class OrderController {
	//模拟url
    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment> create(Payment payment) {
        return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
    }


    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(
                            
                            版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_38938338/article/details/105157608
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢