- Eureka简介
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
- Eureka组件
Eureka包含两个组件:Eureka Server和Eureka Client
- Eureka Server
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Server本身也是一个服务,默认情况下会自动注册到Eureka注册中心。
如果搭建单机版的Eureka Server注册中心,则需要配置取消Eureka Server的自动注册逻辑。毕竟当前服务注册到当前服务代表的注册中心中是一个说不通的逻辑。
Eureka Server通过Register、Get、Renew等接口提供服务的注册、发现和心跳检测等服务。
- Eueka Client
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用默认为轮询(round-robin)负载算法的负载均衡器,用来访问application service。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Client分为两个角色,分别是:Application Service(Service Provider)和Application Client(Service Consumer)a. Application Service : 服务提供方,是注册到Eureka Server中的服务。
b. Application Client : 服务消费方,通过Eureka Server发现服务,并消费。
c. 在这里,Application Service和Application Client不是绝对上的定义,因为Provider在提供服务的同时,也可以消费其他Provider提供的服务;Consumer在消费服务的同时,也可以提供对外服务
- Eureka Server架构原理简介
Register(服务注册):把自己的IP和端口注册给Eureka。
Renew(服务续约):发送心跳包,每30秒发送一次。告诉Eureka自己还活着。
Cancel(服务下线):当provider关闭时会向Eureka发送消息,把自己从服务列表中删除。防止consumer调用到不存在的服务。
Get Registry(获取服务注册列表):获取其他服务列表。
Replicate(集群中数据同步):eureka集群中的数据复制与同步。
Make Remote Call(远程调用):完成服务的远程调用。
搭建Eureka单机版
- 在pom.xml中添加配置管理和相关jar包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 注册中心Eureka的单机版
a. 添加jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
b. 配置application.yml文件
spring:
application:
name: eureka_server # spring应用名称, 建议相同服务的spring应用起同样的名字, 方便spring cloud集群管理
server:
port: 8761 # 指定eureka server的端口号。 eureka server的端口号默认就是8761
eureka:
client:
register-with-eureka: false # 禁止eureka server的注册服务功能
fetch-registry: false # 禁止eureka server的发现服务功能
##c. 在启动类上添加@EnableEurekaServer主键
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
搭建Eureka集群版
只需要更改application.yml文件即可
spring:
application:
name: eureka_server # spring应用名称, 建议相同服务的spring应用起同样的名字, 方便spring cloud集群管理
server:
port: 8761 # 指定eureka server的端口号。 eureka server的端口号默认就是8761
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8762/eureka/ # 注册到eureka server的目标地址, 格式http(s)://ip:port/eureka/,如果需要向多台eureka server服务器进行注册,用逗号分隔
添加注册中心的安全验证中心
- 添加jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 编写安全验证配置信息, 关闭跨站请求伪造,以便浏览器可以访问
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}
- 配置application.yml配置文件
spring:
application:
name: eureka_server # spring应用名称, 建议相同服务的spring应用起同样的名字, 方便spring cloud集群管理
security:
user:
name: root # eureka server的账号
password: 123456 #eureka server密码
server:
port: 8761 # 指定eureka server的端口号。 eureka server的端口号默认就是8761
eureka:
client:
service-url:
defaultZone: http://{user_name}:{password}@127.0.0.1:8761/eureka/ # 注册到eureka server的目标地址, 格式http(s)://ip:port/eureka/,如果需要向多台eureka server服务器进行注册,用逗号分隔