如果你对 Spring Cloud 体系还不是很了解,可以先读一下 Spring Cloud 都有哪些模块
Eureka 是 Netflix 开源的服务注册发现组件,服务发现可以说是微服务架构的核心功能了,微服务部署之后,一定要有服务注册和发现的能力,Eureka 就是担任这个角色的。如果你用过 dubbo 的话,那一定知道 dubbo 中服务注册和发现的功能是用 zookeeper 来实现的。
Eureka 目前是 2.x 版本,并且官方已经宣布不再维护更新。不过其实 Eureka 已经很稳定了,当做注册中心完全没有问题。Spring Cloud 集成了 Eureka ,并做了完善的封装。方便我们使用 Spring boot 开发的时候简单配置就可以使用。
微服务框架中有三类角色,分别是注册中心、服务提供者、服务消费者,注册中心就是今天要说的主角 Eureka,这篇文章简单说明 Spring Cloud Eureka 的使用,模拟实现单点和高可用注册中心,并简单介绍服务提供者和服务消费者如何使用 Eureka 提供的服务注册和发现功能。
版本说明
Java : 1.8
Spring Boot : 2.1.3.RELEASE
Spring Cloud: Finchley.SR2
之说以要说一下版本,因为 Finchley.SR2 版本较之前的版本包名有变化,所以在引用 maven 包的时候要注意。
单点注册中心 创建 Eureka 注册中心1、引用 maven 包,其中
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR2</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 最新版的 eureka 服务端包 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- 监控管理 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>2、新建 bootstrap.yml,并配置 Spring cloud 参数
spring: application: name: kite-eureka-center cloud: inetutils: ## 网卡设置 ignoredInterfaces: ## 忽略的网卡 - docker0 - veth.* - VM.* preferredNetworks: ## 优先的网段 - 192.1683、新建 application.yml ,并配置参数
server: port: 3000 eureka: instance: hostname: eureka-center appname: 注册中心 client: registerWithEureka: false # 单点的时候设置为 false 禁止注册自身 fetchRegistry: false serviceUrl: defaultZone: :3000/eureka server: enableSelfPreservation: false evictionIntervalTimerInMs: 4000bootstrap.yml 和 application.yml 的区别:
bootstrap.yml 在 application.yml 之前启动;
bootstrap.yml 配置 application 的 name、spring.cloud.config.server.git.uri、一些encryption/decryption(加密/解密)信息;
application.yml 的信息会覆盖 bootstrap.yml 中的内容,当遇到相同的配置的时候;
4、新建 Application.java 启动文件
@EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }@EnableEurekaServer 表示使用 Eureka Server 端功能,也就是启动为一个注册中心节点。
5、运行 Application.java ,访问 :3000 即可看到 Eureka 提供的 ui 控制台。
创建一个服务提供者接下来创建一个服务提供者,并注册到上面创建的 Eureka 注册中心。
1、添加 maven 依赖包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- eureka 客户端 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>2、配置 application.yml
server: port: 3001 eureka: instance: preferIpAddress: true client: serviceUrl: defaultZone: :3000/eureka ## 注册到 eureka spring: application: name: single-provider ## 应用程序名称,后面会在消费者中用到3、创建一个简单的 RESTful 接口 controller
@Slf4j @RestController public class ProviderController { @Autowired private DiscoveryClient discoveryClient; @RequestMapping(value = "/hello") public String hello(){ List<String> services = discoveryClient.getServices(); for(String s : services){ log.info(s); } return "hello spring cloud!"; } @RequestMapping(value = "/nice") public String nice(){ List<String> services = discoveryClient.getServices(); for(String s : services){ log.info("gogogo" + s); } return "nice to meet you!"; } }