Eureka是什么
Eureka是Netflix使用Java开发的服务治理框架,提供服务注册与发现功能,分为客户端与服务端。
Eureka Server服务端,提供服务注册功能,会维护一个服务列表,存储所有节点的信息。
Eureka Client客户端,默认每30s向服务端发送心跳连接注册自身,超时会被认为服务不可用。客户端分为服务提供者和服务消费者。
Eureka搭建实战
- 新建maven项目,archetype选择maven-archetype-quickstart,并在pom.xml中引入依赖
依赖:dependencies中添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-start-parent</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
问题一:为什么使用spring-cloud-starter-netflix-eureka-server而不是spring-cloud-starter-eureka-server依赖?
答:spring-cloud-starter-eureka-server依赖已经废弃;
spring-cloud-starter-netflix-eureka-server依赖官方推荐使用。
问题二:为什么使用dependencyManagement管理父pom而不是使用parent?
答:
parent代表父pom的意思,有继承关系,但是只能继承一个,单继承;
parent引用的父pom,子pom中必须显示声明group和artifactId才可以使用,只是无需使用version。
dependencyManagement是声明本pom中的依赖,统一管理版本,可以写多个;
问题三:为什么org.springframework.cloud的版本号与正常版本号不同?
因为Spring Cloud包含多个组件每个组件有自己的版本号,Spring Cloud只是做了一个整合,因此,使用命名来取代版本号。
- src/main下新建resource文件夹,并设置成资源目录,编写配置文件application.yml
server:
port: 8888
eureka:
instance:
hostname: test
client:
register-with-eureka: false
fetch-registry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
参数详解:
//是否向注册中心注册服务,本身就是注册中心,不需要注册;
register-with-eureka: false
//获取服务列表,本身是注册中心,不需要获取;
fetch-registry: false
//指定注册中心地址,单实例指向自身;
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 启动类编码
package com.dl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* Hello world!
*
*/
@EnableEurekaServer
@SpringBootApplication
public class App
{
public static void main( String[] args )
{
SpringApplication.run(App.class,args);
}
}
Eureka高可用
高可用通常指系统可用性高,减少系统不可用的时间,可以通过冗余(集群) + 自动故障转移来实现。
Eureka高可用,可以通过配置集群来实现,集群中某个节点出现故障,其它节点仍可提供服务。
相对于单个节点,application.ymlv中配置需要修改:
节点一:
spring:
application:
//名称相同
name: eureka-one
eureka:
instance:
hostname: test
client:
//必须设置为true
register-with-eureka: true
fetch-registry: true
serviceUrl:
//指向其它Eureka注册中心地址
defaultZone: http://localhost:8887/eureka/
节点二:
spring:
application:
name: eureka-one
eureka:
instance:
hostname: test_two
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://localhost:8888/eureka/
问题
- 出现Correct the classpath of your application so that it contains a single, compatible version of com.google.gson.GsonBuilder;更换Gson版本,在pom.xml中增加依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>