微服务架构中,大型复杂的系统按功能或者业务需求垂直切分成更小的子系统,这些子系统以独立部署的子进程存在,它们之间通过网络调用进行通信。这些独立部署的服务如何发现对方成为了首先要解决的问题,所以在微服务架构中往往都会存在一个中心化的注册中心。
Spring 作为 Java 生态中最核心的开发框架,从 Spring MVC 到 Spring Boot 持续不断解放着 Java 开发者的生产力,而 Spring Cloud 是 Spring 面向云原生时代微服务架构给出的答案。
在 Spring Cloud 中,Eureka 就扮演了注册中心的角色。Eureka 是一款由 Netflix 开源,使用 Java 语言编写的注册中心服务,其在 Netflix 的基础设施中扮演着重要角色。
APISIX 作为云原生微服务 API 网关,在设计之初就已经支持了 etcd 作为服务发现,同时也支持 consul 、nacos 、eureka
而 Apache APISIX 作为业界领先的微服务网关,对 Eureka 提供了原生支持。本文将会使用 Spring Cloud 演示项目作为案例,为大家展示 Apache APISIX 对接 Eureka 服务发现的主要功能及特性。
准备阶段
本次演示使用 Spring 官方提供的 spring-cloud-netflix 教程作为示例,该教程中提供了使用 SpringBoot 启动的 Eureka Server 作为 Spring Cloud 的注册中心,我们也使用相同的方式来启动用于演示的 Eureka 服务端。该项目地址请访问 spring-cloud-samples/eureka。
接下来将为您介绍相关代码和启动方式。
Eureka Server
Spring Cloud 为 Eureka 提供了一个 EnableEurekaServer
的注解,可以直接以 Spring Boot 的方式启动一个 Eureka Server。
代码示例如下:
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
启动方式可直接参考下方代码:
git clone [email protected]:spring-cloud-samples/eureka.git
# 在项目根目录执行
./gradlew bootRun
resources
目录中的 application.yml
文件定义了 Eureka Server 监听在 8761
端口。
server:
port: 8761
接入 Eureka Client 的 HTTP 服务
与 EnableEurekaServer
对应的客户端注解是 EnableEurekaClient
,使用 EnableEurekaClient
可以非常简单得将一个使用 Spring Boot 启动的 HTTP 应用注册到 Eureka 上。
以下为示例代码:
@SpringBootApplication
@EnableEurekaClient
@RestController
public class Application {
@Value("${server.port}")
int serverPort;
@RequestMapping("/")
public String home() {
return String.format("server-%s",serverPort);
}
public static