2.Spring Cloud Eureka 简介
Spring Cloud Eureka 简介
注册发现中心 Eureka 来源于古希腊词汇,意为“发现了”。在软件领域, Eureka 是 Netflix 在线影片 公司开源的一个服务注册与发现的组件,和其他 Netflix 公司的服务组件(例如负载均衡、 熔断器、网关等) 一起,被 Spring Cloud 社区整合为 Spring Cloud Netflix 模块。 Eureka 是 Netflix 贡献给 Spring Cloud 的一个框架!
Spring Cloud Eureka 和 Zookeeper 的区别
什么是 CAP 原则(面试)
CAP 原则又称 CAP 定理,指的是在一个分布式系统中,
-
一致性(Consistency)
-
可用性(Availability)
-
分区容错性(Partition tolerance)(这个特性是不可避免的)
CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
Zookeeper 注重数据的一致性,CP zk (注册中心,配置文件中心,协调中心)
Eureka 注重服务的可用性 AP eureka (注册中心)
Eureka项目搭建
springboot版本号:2.3.12.RELEASE
springcloud版本号:Hoxton.SR12
这个自行选择,但一定要相对应
服务端搭建
-
在模块中创建springboot项目,因为版本更新快,可先选择一个,然后再生成的pom文件中改版本号
只选择一个Eureake Server即可
然后再pom文件中改变SpringBoot和springCould的版本号
-
修改配置文件
server: port: 8761 #默认端口 例如redis:6379,tomcat:8080,MySQL:3306 spring: application: name: eureka-server #应用名称,一般就写服务名字,不要使用特殊字符
可以在启动类上更改名字,和启动的应用名称做修改
-
@EnableEurekaServer //开启eureka
-
如果启动报错可以配置yml文件
eureka: client: fetch-registry: false #不检索自己
客户端搭建
-
创建springboot项目,选择Eureka Discovery Client依赖和Spring Web,然后版本号一会儿再改
-
修改pom文件中springBoot和SpringCloud版本号
-
修改配置文件
server: port: 8080 #客户端的端口没有要求 spring: application: name: eureka-client-a #应用名称,一般就写服务名字 eureka: client: service-url: #指定注册的地址 defaultZone: http://localhost:8761/eureka
可以在启动类上更改名字,和启动的应用名称做修改
-
@EnableEurekaClient //在启动类上开启eureka
客户端可以多创建一个
如何要创建一个客户端集群
-
选个运行的配置文件,上面的copy
-
更改Name,在configuration中的Program arguments:中更改端口号
–server.port=8083
-
然后直接运行
服务端配置文件
server:
port: 8761 #默认端口 例如redis:6379,tomcat:8080,MySQL:3306
spring:
application:
name: eureka-server #应用名称,一般就写服务名字
eureka: #eureka的配置分为三类,server client instance
server:
eviction-interval-timer-in-ms: 10000 #服务端间隔多少毫秒做定期删除的操作
renewal-percent-threshold: 0.85 #续约百分比,超过85%的应用没有续约时,囊二eureka会保护服务,不会删除任意一个服务
instance: # 实例的配置
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #主机名称:应用名称:端口号
hostname: localhost #主机名称或者服务的id
perfer-ip-address: true #以ip的形式显示具体的服务信息
lease-renewal-interval-in-seconds: 5 #服务实例的续约的时间间隔
客服端配置文件
server:
port: 8080 #客户端的端口没有要求
spring:
application:
name: eureka-client-a #应用名称,一般就写服务名字
eureka:
client:
service-url: #指定注册的地址
defaultZone: http://localhost:8761/eurake/
register-with-eureka: true #可以不往eureka注册
fetch-registry: true #应用是否取拉取服务列表到本地
registry-fetch-interval-seconds: 10 #w为了缓解服务列表的脏读问题,拉取服务列表的时间间隔
instance:
hostname: localhost #应用的主机名称 (写主机IP)
instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #主机名称:应用名称:端口号
prefer-ip-address: true #以ip的形式显示具体的服务信息
lease-renewal-interval-in-seconds: 10 #服务实例的续约的时间间隔
注意:yml文件中不能存在tab键,包括尾行,一定要用两个空格缩进
配置eureka-server到服务器上
-
在服务器上新建文件夹/root/wh2106/eureka-server/
-
在本地创建jar包,Dockerfile,run.sh并上传到目录
Dockerfile
FROM openjdk:8 ENV workdir=/root/wh2106/eureka-server COPY . ${workdir} WORKDIR ${workdir} EXPOSE 8761 CMD ["java","-jar","eureka-server-1.0.jar"]
cd .. && docker build ./eureka-server -t eureka-server:1.0
-
在改路径下给jar包和run.sh赋权
chmod 777 eureka-server-1.0.jar chmod 777 run.sh
-
./run.sh
-
开启镜像
docker run --name eureka-server -p 8761:8761 -e REGISTER_WITH_EUREKA=false -d eureka-server:1.0
这时候可以在本地运行一下测试
#注意换成自己的docker id 在docker ps -a 中查看 #进入容器 docker exec -it 9372df2e5f57 bash #在容器内访问 curl localhost:8761
如果返回html页面代码
尝试在外网试试IP地址:8761
如果不行就在安全组开放端口号(阿里云/腾讯云)