SpringCloud--->Spring生态体系的微服务架构:https://spring.io/
官网贴图,如下所示,介绍了微服务的架构体系(话说,英语好读官网,可能很爽吧,没体验过)。
1、微服务是一种架构风格(微服务架构是区分与单体架构的)。一个大型的复杂软件应用,由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好的完成该任务。
2、常见的架构风格,如是,a、客户端与服务端、b、基于组件模型的架构(EJB)、c、分层架构(MVC)、d、面向服务架构(SOA)。
3、微服务的特点,如下所是:
特点一:系统是由多个服务构成。
特点二、每个服务可以单独独立部署。
特点三、每个服务之间是松耦合的。服务内部是高内聚的,外部是低耦合的。高内聚就是每个服务只关注完成一个功能。
4、微服务的优缺点,如下所示:
优点:测试容易、可伸缩性强、可靠性强、跨语言程度会更加灵活、团队协作容易、系统迭代容易。
缺点:运维成本过高,部署数量较多、接口兼容多版本、分布式系统的复杂性、分布式事务。
5、常见软件架构方式的区别,包含MVC架构、RPC架构(面向服务架构)、SOA架构(面向服务架构)、微服务架构(面向服务架构)。如下所示:
不同软件架构的描述,如下所示:
6、什么是 SpringCloud?
1)、Spring Cloud是一个服务治理平台,提供了一些服务框架。包含了:服务注册与发现、配置中心、消息中心 、负载均衡、数据监控等等。
2)、Spring Cloud是一个微服务框架,相比 Dubbo 等 RPC 框架, Spring Cloud 提供的全套的分布式系统解决方案。
3)、Spring Cloud对微服务基础框架 Netflix 的多个开源组件进行了封装,同时又实现了和云端平台以及和 Spring Boot 开发框架的集成。
4)、Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性 token,全局一致性锁,leader 选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。
5)、Spring Cloud为开发者提供了快速构建分布式系统的工具,开发者可以快速的启动服务或构建应用、同时能够快速和云平台资源进行对接。
6)、Sping Cloud是Spring 的一个顶级项目与 Spring Boot、Spring Data 位于同一位置。
7、Spring Cloud的子项目。
1)、Spring Cloud Config:配置管理工具,支持使用 Git 存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等。
2)、Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署。
3)、Spring Cloud Netflix:针对多种 Netflix 组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius 等。
a、Netflix Eureka:一个基于 rest 服务的服务治理组件,包括服务注册中心、服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移。
b、Netflix Hystrix:容错管理工具,实现断路器模式,通过控制服务的节点, 从而对延迟和故障提供更强大的容错能力。
c、Netflix Ribbon:客户端负载均衡的服务调用组件。
d、Netflix Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件。
e、Netflix Zuul:微服务网关,提供动态路由,访问过滤等服务。
f、Netflix Archaius:配置管理 API,包含一系列配置管理 API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
4)、Spring Cloud for Cloud Foundry:通过 Oauth2协议绑定服务到CloudFoundry,CloudFoundry 是 VMware 推出的开源 PaaS 云平台。
5)、Spring Cloud Sleuth:日志收集工具包,封装了 Dapper,Zipkin 和 HTrace操作。
6)、Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。
7)、Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指 OAuth2。
8)、Spring Cloud Consul:封装了 Consul 操作,consul 是一个服务发现与配置工具,与 Docker 容器可以无缝集成。
9)、Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
10)、Spring Cloud Stream:数据流操作开发包,封装了与 Redis,Rabbit、Kafka 等发送接收消息。
11)、Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。
8、什么是服务注册中心。
答:服务注册中心是服务实现服务化管理的核心组件,类似于目录服务的作用,主要用来存储服务信息,譬如提供者 url 串、路由信息等。服务注册中心是 SOA 架构中最基础的设施之一。
9、服务注册中心的作用。
答:服务的注册、服务的发现。
10、常见的注册中心有哪些。
答:例如,Dubbo的注册中心Zookeeper、Sringcloud的注册中心Eureka。
11、服务注册中心解决了什么问题。
答:服务管理、服务的依赖关系管理。
12、什么是Eureka注册中心?
答:Eureka是Netflix开发的服务发现组件,本身是一个基于 REST 的服务。Spring Cloud 将它集成在其子项目 spring-cloud-netflix 中,以实现Spring Cloud 的服务注册于发现,同时还提供了负载均衡、故障转移等能力。
13、Eureka 注册中心三种角色。
a、Eureka Server,通过 Register、Get、Renew 等接口提供服务的注册和发现。
b、Application Service (Service Provider),服务提供方,把自身的服务实例注册到 Eureka Server中。
c、Application Client (Service Consumer),服务调用方,通过 Eureka Server获取服务列表,消费服务。
14、Eureka的入门案例介绍与使用,首先创建Eureka Server,通过 Register、Get、Renew 等接口提供服务的注册和发现。由于使用的是maven构建的springboot项目,所以首先引入pom.xml配置文件,这里需要注意的是springboot的版本、springcloud的版本对应,不然会出现一个版本不对应错误,稍后可以贴一下错误。我使用的springboot版本是2.2.0的,springcloud版本是Hoxton.RC1。
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
5 https://maven.apache.org/xsd/maven-4.0.0.xsd">
6 <modelVersion>4.0.0</modelVersion>
7 <parent>
8 <groupId>org.springframework.boot</groupId>
9 <artifactId>spring-boot-starter-parent</artifactId>
10 <version>2.2.0.RELEASE</version>
11 <relativePath />
12 <!-- lookup parent from repository -->
13 </parent>
14 <groupId>com.bie</groupId>
15 <artifactId>springcloud-eureka-server</artifactId>
16 <version>0.0.1-SNAPSHOT</version>
17 <name>springcloud-eureka-server</name>
18 <description>Demo project for Spring Boot</description>
19
20 <properties>
21 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
23 <java.version>1.8</java.version>
24 <spring-cloud.version>Hoxton.RC1</spring-cloud.version>
25 <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
26 </properties>
27
28 <dependencies>
29 <dependency>
30 <groupId>org.springframework.boot</groupId>
31 <artifactId>spring-boot-starter-web</artifactId>
32 </dependency>
33 <dependency>
34 <groupId>org.springframework.cloud</groupId>
35 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
36 </dependency>
37
38 <dependency>
39 <groupId>org.springframework.boot</groupId>
40 <artifactId>spring-boot-starter-test</artifactId>
41 <scope>test</scope>
42 <exclusions>
43 <exclusion>
44 <groupId>org.junit.vintage</groupId>
45 <artifactId>junit-vintage-engine</artifactId>
46 </exclusion>
47 </exclusions>
48 </dependency>
49 </dependencies>
50
51 <dependencyManagement>
52 <dependencies>
53 <dependency>
54 <groupId>org.springframework.cloud</groupId>
55 <artifactId>spring-cloud-dependencies</artifactId>
56 <version>${spring-cloud.version}</version>
57 <type>pom</type>
58 <scope>import</scope>
59 </dependency>
60 </dependencies>
61 </dependencyManagement>
62
63 <build>
64 <plugins>
65 <plugin>
66 <groupId>org.springframework.boot</groupId>
67 <artifactId>spring-boot-maven-plugin</artifactId>
68 </plugin>
69 </plugins>
70 </build>
71
72 <repositories>
73 <repository>
74 <id>spring-milestones</id>
75 <name>Spring Milestones</name>
76 <url>https://repo.spring.io/milestone</url>
77 </repository>
78 </repositories>
79
80 </project>
如果版本不一致,报错如下所示:
1 java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V
如果不知道如何,找对应的版本,可以使用spring官网的案例,将pom.xml配置拷贝到你的代码里面即可。
最后找到这个页面,然后将这个jdk、打包方式、java语言、maven方式、项目名称、包名称、依赖包等等选择好,就可以下载下来,然后将pom.xml里面的配置拷贝到你的项目里面即可。
然后配置一下application.properties配置文件。将eureka不注册到Eureka-server服务中、不从Eureka-server中获取服务注册信息,避免出现错误。
1 # 配置项目名称
2 spring.application.name=springcloud-eureka-server
3
4 # 配置端口号
5 spring.port=8080
6
7 # 是否将自己注册到 Eureka-Server 中,默认的为 true
8 eureka.client.registerWithEureka=false
9
10 # 是否从 Eureka-Server 中获取服务注册信息,默认为 true
11 eureka.client.fetchRegistry=false
可以将注册@EnableEurekaServer添加到主类上面,表示启动Eureka-server服务端。Eureka提供服务的注册与发现。
1 package com.bie;
2
3 import org.springframework.boot.SpringApplication;
4 import org.springframework.boot.autoconfigure.SpringBootApplication;
5 import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
6
7 @EnableEurekaServer // 表示启动的是eureka的server服务器端
8 @SpringBootApplication
9 public class SpringCloudApplication {
10
11 public static void main(String[] args) {
12 SpringApplication.run(SpringCloudApplication.class, args);
13 }
14
15 }
启动主类以后,如果正常启动可以在浏览器查看到页面信息,Eureka提供的管理界面,通过管理界面可以看到注册到Eureka-server的服务信息。如下所示:
作者:别先生
博客园:https://www.cnblogs.com/biehongli/
如果您想及时得到个人撰写文章以及著作的消息推送,可以扫描上方二维码,关注个人公众号哦。