Spring Gloud
开发分布式系统可能具有挑战性。复杂性从应用层转移到网络层,需要服务之间进行更多的交互。使您的代码成为“云原生”意味着处理 12 个因素的问题,例如外部配置、无状态、日志记录和连接到支持服务。 Spring Cloud 项目套件包含使应用程序在云中运行所需的许多服务。
Spring Cloud 架构亮点
服务发现
在云中,应用程序并不总是知道其他服务的确切位置。服务注册中心(例如 Netflix Eureka)或 Sidecar 解决方案(例如 HashiCorp Consul)可以提供帮助。 Spring Cloud 为 Eureka、Consul、Zookeeper 甚至 Kubernetes 的内置系统等流行注册中心提供了 DiscoveryClient 实现。还有一个 Spring Cloud Load Balancer 可以帮助您在服务实例之间小心地分配负载。
服务注册和发现
需要java1.5,mvn和installj idea 获取代码:git clone https://github.com/spring-guides/gs-service-registration-and-discovery.git
1)从 Spring Initializr 开始
对于所有 Spring 应用程序,您应该从 Spring Initializr 开始。 Initializr 提供了一种快速的方式来拉入应用程序所需的所有依赖项,并为您完成大量设置。本指南需要两个应用程序。第一个应用程序(服务应用程序)只需要 Eureka Server 依赖项
以下清单显示了在您选择 Gradle 时创建的 build.gradle 文件(用于服务应用程序):
plugins {
id'org.springframework.boot' version'2.4.1'
id'io.spring.dependency-management' version'1.0.10.RELEASE'
id'java'
}
group ='com.example'
version ='0.0.1-SNAPSHOT'
sourceCompatibility ='11'
repositories {
mavenCentral()
}
ext {
set('springCloudVersion',"2020.0.0")
}
dependencies {
implementation'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
testImplementation'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom"org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
2)第二个应用程序(客户端应用程序)需要 Eureka Server 和 Eureka Discovery Client 依赖项
plugins {
id'org.springframework.boot' version'2.4.1'
id'io.spring.dependency-management' version'1.0.10.RELEASE'
id'java'
}
group ='com.example'
version ='0.0.1-SNAPSHOT'
sourceCompatibility ='11'
repositories {
mavenCentral()
maven { url'https://repo.spring.io/milestone' }
}
ext {
set('springCloudVersion',"2020.0.0")
}
dependencies {
implementation'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation'org.springframework.boot:spring-boot-starter-web'
testImplementation'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom"org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
test {
useJUnitPlatform()
}
启动 Eureka 服务注册中心
您首先需要一个 Eureka 服务注册中心。您可以使用 Spring Cloud 的 @EnableEurekaServer 来建立一个注册表,其他应用程序可以与之通信。这是一个常规的 Spring Boot 应用程序,添加了一个注释 (@EnableEurekaServer) 以启用服务注册表。以下清单(来自 eureka-service/src/main/java/com.example.serviceregistrationanddiscoveryservice/ServiceRegistrationAndDiscoveryServiceApplication.java)显示了服务应用程序:
package com.example.serviceregistrationanddiscoveryservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ServiceRegistrationAndDiscoveryServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistrationAndDiscoveryServiceApplication.class, args);
}
}
配置文件
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF
与登记服务通话
现在您已经启动了一个服务注册中心,您可以建立一个客户端,它既向注册中心注册自己,又使用 Spring Cloud DiscoveryClient 抽象来查询注册中心以获取其自己的主机和端口。 @EnableDiscoveryClient 激活 Netflix Eureka DiscoveryClient 实现。 (还有其他服务注册中心的其他实现,例如 Hashicorp 的 Consul 或 Apache Zookeeper)。以下清单
要使用 Gradle 运行 Eureka 服务,请在终端窗口(在 /complete 目录中)运行以下命令:
服务端命令:gradlew :eureka-service:bootRun
客户端命令:gradlew :eureka-client:bootRun
通过浏览器查看 服务端:
查看 客户端的
总结:
刚刚使用 Spring 建立了 Netflix Eureka 服务注册表并在客户端应用程序中使用该注册表。
网友评论