Spring Cloud Eureka 是 Netflix Eureka 的 Spring 实现,主要用于微服务架构中的服务注册与发现。Eureka 提供了一个服务注册中心,每个微服务在启动时将自己注册到该中心,其他服务可以通过注册中心查找到这些服务的实例信息,从而实现负载均衡和故障转移等功能。
下面是关于 Eureka 的详细介绍,包括使用方法、代码示例和相关讲解。
创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:
添加 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 的管理页面。
创建 Spring Boot 项目
使用 Spring Initializr 创建一个新的 Spring Boot 项目,选择以下依赖:
添加 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。
在 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
接口。
可以使用 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,可以实现配置的动态刷新,提高系统的灵活性和可维护性。
如果你有任何问题或需要进一步的帮助,请随时告诉我!