微服务:
把大型软件拆分成各种小的服务,
spring -----spring cloud微服务规范 ------- spring Alibaba微服务规范的产品实现
不要寄希望于微服务构架能够解决所有的问题。微服务架构主要解决的是如何快速地开发和部署我们的服务
SpringCloud Alibaba微服务解决方案
1概述
2核心组件分析
服务限流降级: 当下载的东西特别大时就要限流
服务注册与发现:公司的信息如注册金
分布式配置管理:更改已发项目的一些不方便更改的信息,独立出来更改
消息驱动能力:快递员为什么先把快递放快递柜子,相当于缓存
分布式任务调度:
定时任务
3解决方案架构设计
sentinel:限流
ribbon:负载均衡
gateway:api网关 类和接口 url 如/notice/select
auth center: 认证中心:不可能每次都去登录 索引需要认证
zipkin/walking:
elk:日志聚合服务:
构建SpringCloud 聚合项目并进行环境初始化
1工程结构
GitCGB2105IVProjects (工作区/空项目)
├── 01-sca //(微服务父工程)
├── sca-provider //服务提供方法
├── sca-consumer //服务消费方法
├── sca-gateway //网关服务
extends /import代码重用的方式
2创建空项目
3项目初始化配置
4创建聚合父工程
01-sca pom.xl
<?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.cy</groupId>
<artifactId>01-sca</artifactId>
<version>1.0-SNAPSHOT</version>
<!--maven的父工程中的dependencyManagement主要负责定义依赖版本管理-->
<dependencyManagement>
<dependencies>
<!--Spring Boot 依赖(此依赖中定义了springboot工程核心依赖的版本)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<scope>import</scope>
<type>pom</type> <!--只有类型为pom的才可以import-->
</dependency>
<!--Spring Cloud 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!--Spring Cloud Alibaba依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<!--dependencies元素中定义子工程中都需要的依赖-->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!--provided表示只在编译阶段有效运行阶段无效-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<!--定义maven编译版本,指定这个以后,当前工程以及子工程都会采用此编译版本-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version><!--这个版本与你maven版本有关-->
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
5创建服务提供方模块
6创建服务消费方模块
7创建API网关服务模块
总结(Summary)
sca-gateway 服务网关就是网络请求
sca-consumer 就是消费模块
sca-provider就是提供模块
解决pom。xml横线问题
idea pom.xml横线
课后作业:工程之间 的依赖:
工程代码的复用:
常见问题分析
为什么需要微服务?(对系统分而治,解决因并发访问过大带来的系统复杂性(例如:业务,开发,测试,升级,可靠性等)
微服务设计的特点?(单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但会带来一定的维护成本)
微服务解决方案有哪些?(大厂自研,中小企业采用开源Spring Cloud Alibaba,Spring Cloud Netfix等 )
微服务设计中需要哪些关键组件(服务的注册,发现,配置,限流降级,访问入口管理,分布式事务管理等)
创建聚合工程的目的?(实现工程之间资源的的共享)
如何修改聚合工程中项目的编译和运行版本?(build->plugins->plugin->maven-compiler-plugin)
maven工程中build元素的作用?(定义项目的编译,打包方式)
maven父工程的packaging元素内的值是什么?(pom)
maven父工程中dependencyManagement元素的作用是什么?(定义项目的版本)
常见Bug分析
依赖或插件无法下载?(本地库冲突,网络,maven配置,版本)
commom:下创建一个类
在其他包中试着调用
common类:
创建stringutils类
package com.jt.common.util;
public class StringUtils {
public static boolean isEmpty(String str){
return str==null||"".equals(str);
}
}
编辑provider测试类
package com.jt;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.util.StringUtils;
@SpringBootTest
public class StringTests {
@Test
void testStringEmpty(){
String content="helloworld";
boolean flag = StringUtils.isEmpty(content);
System.out.println(flag);
}
}
编辑provider启动类
package com.jt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProviderApplication {
public static void main(String[]args){
SpringApplication.run(ProviderApplication.class, args);
}
}
编辑provide pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.jt</groupId>
<artifactId>sca-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>