SpringCloud —— Eureka 集群
前文
微服务(一)SpringCloud 简介
微服务(二)SpringCloud 版本选型
微服务(三)SpringCloud 工程构建
SpringCloud —— Eureka 注册中心
文章目录
- 前文
- Eureka 集群说明
- 单机版的 Eureka 配置
- Eureka 集群
- 修改 hosts 文件
- 新建 Module(7001)
- 添加依赖
- 编写 application.yml 文件
- 编写启动类
- 新建 Module(7002)
- 添加依赖
- 编写 application.yml 文件
- 编写启动类
- 测试
Eureka 集群说明
先来看下单机版的 Eureka
服务注册:将服务信息注册进注册中心
服务发现:从注册中心上获取服务信息
实质:存 key 服务命令,取 key 调用地址
- 先启动 Eureka 注册中心
- 启动服务提供者
- 服务启动后会把自身信息(比如服务地址以别名的方式注册进 Eureka)
- 消费者服务在需要调用接口时,使用服务别名去注册中心获取实际的 RPC 远程调用地址
- 消费者或得调用地址后,底层实际是利用 HttpClient 技术实现远程调用
- 消费者获得服务地址后会缓存在本地 JVM 内存中,默认每间隔 30 s 更新一次服务调用地址
问题:微服务 RPC 远程服务调用最核心的是什么?
高可用,比如说注册中心只有 only one,那么当这个注册中心出现故障了,会导致整个服务环境不可用
所以需要搭建 Eureka 注册中心集群,实现负载均衡 + 故障容错
单机版的 Eureka 配置
在介绍集群的 Eureka 之前,先来看下单机版的
server:
port: 7001
eureka:
instance:
hostname: localhost # Eureka 服务端的实例名称
client:
register-with-eureka: false # false 表示不向注册中心注册自己
fetch-registry: false # false 表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
service-url:
# 设置与 Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${ eureka.instance.hostname}:${ server.port}/eureka/
单机版的 hostname 默认是 localhost,但是当有两台 Eureka 的时候,hostname 就不能写 localhost 了
Eureka 集群
修改 hosts 文件
打开 C:\Windows\System32\drivers\etc 路径,修改 etc 下的 hosts 文件,增加以下内容
新建 Module(7001)
添加依赖
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
编写 application.yml 文件
注意:这里不能像单机版那样写了,应该 相互注册
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com # Eureka 服务端的实例名称
client:
register-with-eureka: false # false 表示不向注册中心注册自己
fetch-registry: false # false 表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
service-url:
# 设置与 Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7002.com:7002/eureka/
这个是 7001 端口的 EurekaServer,注册的地址是 7002 的
编写启动类
package com.java.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/** * @author Woo_home * @create 2020/3/25 11:33 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerMain7001 {
public static void main(String[] args){
SpringApplication.run(EurekaServerMain7001.class,args);
}
}
新建 Module(7002)
添加依赖
<dependencies>
<!--eureka-server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--boot web actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般通用配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
编写 application.yml 文件
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com # Eureka 服务端的实例名称
client:
register-with-eureka: false # false 表示不向注册中心注册自己
fetch-registry: false # false 表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
service-url:
# 设置与 Eureka Server 交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://eureka7001.com:7001/eureka/
这个是 7001 端口的 EurekaServer,注册的地址是 7001 的
编写启动类
package com.java.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/** * @author Woo_home * @create 2020/3/25 12:46 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerMain7002 {
public static void main(String[] args){
SpringApplication.run(EurekaServerMain7002.class,args);
}
}
测试
先后启动 7001,7002 项目
访问 http://localhost:7001/,可以发现 7001 指向的是 7002
访问 http://localhost:7002/,可以发现 7002 指向的是 7001
而且还可以通过域名访问,如:
这样,简单的 Eureka 集群就搭建好了
还没有评论,来说两句吧...