- Spring Cloud的介绍
- Spring Cloud Config
- Spring Cloud Config的多种存储后端及使用
- Spring Cloud Eureka
- Spring Cloud Gateway
- Spring Cloud OpenFeign
- Spring Cloud Circuit Breaker
- Spring Cloud Sleuth
- Spring Cloud Stream
- Spring Cloud 部署
- Spring Cloud的多环境部署及日志收集
Spring Cloud Eureka
class Spring Cloud EurekaSpring Cloud Eureka 是 Netflix Eureka 的 Spring 实现,主要用于微服务架构中的服务注册与发现。Eureka 提供了一个服务注册中心,每个微服务在启动时将自己注册到该中心,其他服务可以通过注册中心查找到这些服务的实例信息,从而实现负载均衡和故障转移等功能。
下面是关于 Eureka 的详细介绍,包括使用方法、代码示例和相关讲解。
Eureka 的主要功能
- 服务注册与发现:每个微服务在启动时将自己的信息注册到 Eureka 服务器,其他服务通过 Eureka 服务器获取服务信息。
- 健康检查:Eureka 服务器定期检查注册的服务是否健康,如果发现某个服务不可用,会将其从注册表中剔除。
- 负载均衡:通过 Eureka 获取服务列表,可以实现客户端的负载均衡。
- 故障转移:当某个服务不可用时,Eureka 可以将请求转发到其他可用的服务实例。
使用示例
1. Eureka 服务注册中心
创建 Eureka 服务注册中心
-
创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:
- Eureka Server
-
添加 Eureka Server 依赖
在
pom.xml
中添加 Eureka Server 依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
-
配置 Eureka Server
在项目的主类中,使用
@EnableEurekaServer
注解启用 Eureka Server:import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
-
配置文件
application.yml
配置文件中定义 Eureka Server 的基本信息:
server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false server: enable-self-preservation: false
server.port
:指定 Eureka Server 的端口。eureka.client.register-with-eureka
:是否将 Eureka Server 自身注册到 Eureka。eureka.client.fetch-registry
:是否从 Eureka Server 获取注册表信息。eureka.server.enable-self-preservation
:是否启用自我保护模式(关闭自我保护模式以便于测试)。
-
启动 Eureka Server
运行
EurekaServerApplication
类,启动 Eureka 服务注册中心。访问http://localhost:8761
可以看到 Eureka 的管理页面。
2. Eureka 客户端
创建 Eureka 客户端服务
-
创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:
- Eureka Discovery Client
- Spring Web
-
添加 Eureka Client 依赖
在
pom.xml
中添加 Eureka Client 依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
-
配置 Eureka Client
在项目的主类中,使用
@EnableEurekaClient
注解启用 Eureka Client:import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class EurekaClientApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientApplication.class, args); } }
-
配置文件
application.yml
配置文件中定义 Eureka Client 的基本信息:
server: port: 8080 spring: application: name: eureka-client eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true
server.port
:指定服务的端口。spring.application.name
:指定服务的名称。eureka.client.service-url.defaultZone
:指定 Eureka Server 的地址。eureka.instance.prefer-ip-address
:使用 IP 地址进行注册。
-
创建一个简单的 REST 控制器
创建一个简单的 REST 控制器,提供一个测试接口:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String sayHello() { return "Hello from Eureka Client!"; } }
-
启动 Eureka Client
运行
EurekaClientApplication
类,启动 Eureka 客户端服务。服务启动后会自动注册到 Eureka Server。
3. 服务调用
使用 RestTemplate 调用服务
在 Eureka Client 中,可以使用 RestTemplate
调用其他服务。需要使用 @LoadBalanced
注解来启用客户端负载均衡。
-
配置 RestTemplate
在 Eureka Client 项目中,配置
RestTemplate
:import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class AppConfig { @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } }
-
调用其他服务
使用
RestTemplate
调用其他服务:import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class ServiceController { @Autowired private RestTemplate restTemplate; @GetMapping("/invoke") public String invokeService() { return restTemplate.getForObject("http://eureka-client/hello", String.class); } }
在上面的代码中,通过
RestTemplate
调用eureka-client
服务的/hello
接口。
4. 动态刷新 Eureka 配置
可以使用 Spring Cloud Config 和 Spring Cloud Bus 动态刷新 Eureka 配置。
-
添加依赖
在
pom.xml
中添加 Spring Cloud Config 和 Spring Cloud Bus 依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency>
-
配置文件
在
bootstrap.yml
中配置 Config Server 地址:spring: cloud: config: uri: http://localhost:8888
-
刷新配置
使用 Spring Cloud Bus 刷新配置:
curl -X POST http://localhost:8080/actuator/bus-refresh
小结
Eureka 是微服务架构中的重要组件,用于服务注册与发现。通过 Eureka,服务可以动态地注册和发现其他服务,实现负载均衡和故障转移。结合 Spring Cloud Config 和 Spring Cloud Bus,可以实现配置的动态刷新,提高系统的灵活性和可维护性。
如果你有任何问题或需要进一步的帮助,请随时告诉我!