阅读:76
目录
微服务架构已在云原生架构中发挥着举足轻重的作用,而SpingCloud无疑是微服务架构的集大成者,云计算最佳业务实践。
SpringCloud体系主要包括以下组件:
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含Eureka Server和Eureka Client两个组件。
<modelVersion>4.0.0</modelVersion>
<groupId>com.cxy965</groupId>
<artifactId>parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<description>A maven project to study maven.</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.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>Hoxton.SR3</spring-cloud.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>${tomcat.scope}</scope>
</dependency>
</dependencies>
</dependencyManagement>
<groupId>com.cxy965</groupId>
<artifactId>registry</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>com.cxy965</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
package com.cxy965.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @Author:公众号:程序员965
* @create 2022-06-06
**/
@EnableEurekaServer
@SpringBootApplication
public class RegistryApplication {
public static void main(String[] args) {
SpringApplication.run(RegistryApplication.class, args);
}
}
server:
port: 8001
spring:
application:
name: registry
eureka:
instance:
hostname: 0.0.0.0
lease-renewal-interval-in-seconds: 10 #服务的注册涉及到心跳连接,默认为每30s
lease-expiration-duration-in-seconds: 30 #服务被移除的时间默认为90s
client:
healthcheck:
enabled: true #开启心跳
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
registry-fetch-interval-seconds: 30 #eureka client间隔多久去拉取服务注册信息,默认为30秒
这样第一个Eureka服务端就开发完成了,接下来我们创建集群。
如果要搭建服务端集群,需要开启 Eureka 集群配置,各服务端启动时 Eureka Server 会将注册信息向其它 Eureka Server 进行同步,因此搭建高可用集群架构只需要将 Eureke Server 配置指向其它可用的 serviceUrl 即可。
在上面 Eureka 单个服务端项目的基础上,修改配置文件中的 register-with-eureka、fetch-registry以及serviceUrl.defaultZone参数,如下:
server:
port: 8001
spring:
application:
name: registry
eureka:
instance:
hostname: 0.0.0.0
lease-renewal-interval-in-seconds: 10 #服务的注册涉及到心跳连接,默认为每30s
lease-expiration-duration-in-seconds: 30 #服务被移除的时间默认为90s
client:
healthcheck:
enabled: true #开启心跳
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://localhost:8002/eureka/,http://localhost:8003/eureka/
registry-fetch-interval-seconds: 30 #eureka client间隔多久去拉取服务注册信息,默认为30秒
分别启动eurekaserver1、eurekaserver2、eurekaserver3三个项目即可。
注意,因为为本地测试项目,三个项目均部署在本地localhost,作为高可用集群环境,为避免服务器崩溃后集群中其他项目可用,需部署在不同服务器上,部署在不同服务器后,端口可以改为相同的。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
/**
* @Author:公众号:程序员965
* @create 2022-06-06
**/
@EnableEurekaClient
@SpringBootApplication
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args);
}
}
server:
port: 8002
spring:
application:
name: app
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
分别启动服务端和客户端,打开浏览器中输入http://localhost:8001/;显示客户端注册成功:
总结:Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
在2020年4月之前,为了避免与子项目混淆,SpringCloud版本是依据伦敦地铁站名命名,并按照字母顺序发布:比如Angle、Brixton、Camden、Edgware、Finchley、GreenWich、Hoxton等。版本号中的字母含义:
可能版本发布太快,地铁站名不够用了,2020年4月后发布的版本改为日历化版本(Calendar Versioning)的命名方式,格式为“YYYY.MINOR.MICRO-SNAPSHOT/M1/RC2”。
版本发布可能的顺序如下:
SNAPSHOT-->M-->RC-->RELEASE-->SR--GA
这么多版本如何选择?
最新的且标注GA的版本,最好选择SR后面的数字较大的版本。