1. eureka出现的原因
我们知道在微服务的架构中,通常会根据系统的特性、特点将系统成分成多个模块(服务),用于应对高并发,大量数据的对外服务。
这时,拆分系统后,比如将拆分成了 订单服务,商品服务,用户服务,库存服务,积分服务,积分服务等,拆开后就代表可以独自发布。
这样就导致了 各个服务之间 不能互相通信了,比如 下单时,需要减库存(库存服务),需要给下单人 加积分(积分服务)等。
所以为了 能够让对应的模块 获取其他的模块信息,首先要解决的问题就是要知道,我需要的服务在哪里?
这样就出现了一种解决方案,那就是用个第三方来存储 所有的服务的元信息(可以简单理解为ip:port),这个第三方就称为 服务注册中心
微服务架构中 常用的注册中心有 eureka,zookeeper,nacos等。
我这看下eureka的简单使用
2. eureka server 单节点配置
新建一个工程
- pom.xml配置

我这里采用的是当前最新版本
SpringBoot版本为:2.1.8.RELEASE
SpringCloud版本为:Greenwich.SR2
- application.yml
# 端口号
server:
port: 7000
spring:
application:
name: eureka-server
eureka:
instance:
hostname: server
client:
# 是否拉取 注册的服务信息, 默认false;因为这是一个单点的EurekaServer,不需要同步其它EurekaServer节点的数据
fetch-registry: false
# 是否注册自身到eureka服务,默认false
register-with-eureka: false
注意 :6000这个端口不要用,一个坑,好像chrome.edge把这个端口禁用了,有的浏览器能用。
- 启动类上 添加 @EnableEurekaServer 注解
// 添加 @EnableEurekaServer
@EnableEurekaServer
@SpringBootApplication
public class LinnEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(LinnEurekaApplication.class, args);
}
}
- 需要修改下 host
windows 系统在 C:\Windows\System32\drivers\etc\hosts 打开后添加

- 启动后 访问 http://server:7000 看到下面的 页面 表示 配置成功

3. eureka server高可用集群配置
eureka支持配置集群,即每一台 Eureka 都在配置中指定另一个 Eureka 或多个 地址作为伙伴,它在启动时会向伙伴节点获取注册列表
配置如下:
- 首先 弄三个(我这配置3个机器)配置文件 比如 application-server1.yml,application-server2.yml,application-server3.yml
① application-server1.yml文件
# 端口号
server:
port: 7001
eureka:
instance:
hostname: server1
client:
# 是否拉取 注册的服务信息, 默认true
fetch-registry: false
# 是否注册自身到eureka服务,默认true
register-with-eureka: false
# 如果是单节点eureka-server, 这里可以不用写 ;如果写了 表示 配置成 高可用集群,用逗号分割 其他server地址
serviceUrl:
defaultZone: http://server2:7002/eureka/,http://server3:7003/eureka/
② application-server2.yml文件
# 端口号
server:
port: 7002
eureka:
instance:
hostname: server2
client:
# 是否拉取 注册的服务信息, 默认true
fetch-registry: false
# 是否注册自身到eureka服务,默认true
register-with-eureka: false
# 如果是单节点eureka-server, 这里可以不用写 ;如果写了 表示 配置成 高可用集群,用逗号分割 其他server地址
serviceUrl:
defaultZone: http://server1:7001/eureka/,http://server3:7003/eureka/
③ application-server3.yml文件
# 端口号
server:
port: 7003
eureka:
instance:
hostname: server3
client:
# 是否拉取 注册的服务信息, 默认true
fetch-registry: false
# 是否注册自身到eureka服务,默认true
register-with-eureka: false
# 如果是单节点eureka-server, 这里可以不用写 ;如果写了 表示 配置成 高可用集群,用逗号分割 其他server地址
serviceUrl:
defaultZone: http://server1:7001/eureka/,http://server2:7002/eureka/
- 分别以不同的 profile 启动
java -jar xxx.jar --spring.profiles.active=server1
java -jar xxx.jar --spring.profiles.active=server2
java -jar xxx.jar --spring.profiles.active=server3
如果在 idea中可以直接配置指定:

- 启动后分别访问 server1:7001,server2:7002,server3:7003 比如访问 server1:7001

看到有另外的两个副本 表示 配置成功
- 配置的话也可以这么配置(profiles多种写法),启动后同样可以看到
spring:
application:
name: eureka-server
eureka:
client:
# 是否拉取 注册的服务信息, 默认true
fetch-registry: false
# 是否注册自身到eureka服务,默认true
register-with-eureka: false
serviceUrl:
defaultZone: http://server6:7006/eureka/,http://server7:7007/eureka/,http://server8:7008/eureka/
---
spring:
profiles: es1
server:
port: 7006
eureka:
instance:
hostname: server6
---
spring:
profiles: es2
# 端口号
server:
port: 7007
eureka:
instance:
hostname: server7
---
spring:
profiles: es3
# 端口号
server:
port: 7008
eureka:
instance:
hostname: server8
4. eureka 客户端
客户端就是所有的服务提供方,比如用户服务,订单服务,库存服务,都需要注册到 eureka。
注册到 eureka非常简单,我创建了一个order-service工程,模拟订单服务,分三步走:
- 添加依赖(在对应的服务中)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 在启动类上加上注解 @EnableEurekaClient
// 添加 @EnableEurekaClient 注解
// 后来看官网说是 可以不用加 @EnableEurekaClient 注解(只需要添加上面的依赖就可以了),我没有加也是可以注册上去的
//@EnableEurekaClient
@SpringBootApplication
public class LinnOrderApplication {
public static void main(String[] args) {
SpringApplication.run(LinnOrderApplication.class, args);
}
}
- 配置文件 application.yml
# 应用名称
spring:
application:
name: order-service
server:
port: 9000
eureka:
client:
serviceUrl:
# 注册中心地址,写一个即可,其他会同步过去
#defaultZone: http://server1:7001/eureka,http://server2:7002/eureka,http://server3:7003/eureka,
defaultZone: http://server1:7001/eureka
- 启动工程
访问之前注册中心地址 server1:7001

看到 有order-service注册上去了
5. eureka 客户端 集群配置
这里集群就是 每个被拆分的服务 分多分部署,比如还是以订单为例
- 新建两个配置文件 application-order1.yml,application-order2.yml
①application-order1.yml 文件
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://server1:7001/eureka
②application-order2.yml 文件
server:
port: 9002
eureka:
client:
serviceUrl:
defaultZone: http://server1:7001/eureka
- 以不同的 profiles 启动
java -jar xxx.jar --spring.profiles.active=order1 java -jar xxx.jar --spring.profiles.active=order2
或者在idea中配置
- 访问server1:7001

6. 小看
这里只是简单的操作使用,还有很多的配置,没有尝试,后续用到再说。