Springcloud服务注册中心eureka
1.1.服务eureka注册的几个重要的概念
(1)服务注册:当你的服务需要整合入cloud时,就需要向eureka注册中心注册你的服务。很明显这是你的服务发起的动作,即服务端向客户端发送注册信息,包含服务端的ip,端口等等一系列的元数据。
(2)服务续约:即eureka客户端定时发送我还活着的信息,这里我们就可以看出eureka客户端用定时器定时(默认30s,可以修改但是不建议)询问服务的生命周期(实际上eureka2.0.x的确是定时器)。
(3)服务剔除:即当eureka的客户端超过30*3s没有发送服务,就默认该服务已经挂掉,该服务的相关元数据就要从服务端剔除掉
1.2 简要说明eureka的流程
这是官方说明的文档。
(1)部署了3台eureka服务器,(实则互为客户端),这是部署为eureka的集群中心,后面我们会说明,这里暂时当一台服务器
(2)有4台应用请求端。其中他们都注册到eureka上,并且通过远程协议相互调用服务(这部分展示不用管)
(3)综上所述,实则就是客户请求端向注册中心发送请求。
1.3.简要说明eureka的内存运行
(1)eureka的实现基础:eureka是基于servlet容器实现的
(2)eureka服务端的简单的注册流程:
初始化ServletContext
-》 初始化EurekaServerContext
-》 将服务对象实例存储在map中(更具map底层实现实现服务对象实例的更新)
(3)eureka的客户端简单的实现:
客户端基于shouldRegisterWithEureka与shouldFetchRegistry来实现注册的(discover),如果上述属性不全为false,则开始创建发送心跳和线程池
并且初始化一个定时刷新的任务。
(4)eureka对外暴露:
如果我们需要将服务注册到eureka中,我们就需要在该服务的yml文件中配置添加eureka.*相关配置,其中 defaultZone则说明了eureka的对外暴露基于http协议的。
其实rureka对外暴露服务基于jax-rs标准提供rest方式进行的。
1.4.搭建简单的eureka服务
(1)applicatuon.yml
spring:
application:
name: eureka-server
server:
port: 8761
eureka:
instance:
hostname: localhost ###eurekad的配置域名,不建议使用localhost,建议使用虚拟host
client:
service-url:
defaultZone: http://localhost:8761/eureka/ ####Zone主要获取分区,在eureka的源码中有说明
fetch-registry: false
register-with-eureka: false ###是否进行注册,如果时eureka的服务则不需要
(2) springbootAppliaciton.java
@SpringBootApplication //声明springboot启动类
@EnableEurekaServer //声明一个eureka的服务段
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
(3)pom.xml
主要使用的时springboot2.0.4.RELEASE和spirngcloud-Finchley.SR1版本(注意版本不一致问题很大)
1.5 搭建一个简单的eureka的客户端
ps:这里关于客户端就不搭建后面每一个服务都可以看作eureka的客户端
1.6 关于eureka的集群
(1)我们在说明eureka的流程时,我们可以看出eureka是用来查看服务是否在线,我们是否需要考虑服务将其记录在相关持 久化设备中?后面我们会通过zinkip和admin做服务的具体监控。
(2 )在上述中我们只是搭建了一个服务端,如果服务端挂掉,那么会导致后续的服务注册都不可用,这是我们就需要考虑是 不是多搭建几个服务端,如果一个挂了,就自动注册到其他服务端上?同时我们就需要考虑一个问题,在搭建多个服务 端时,如何控制多个服务段能够保持服务注册一致。
(3)搭建eureka服务端的集群 (其他的基本不变主要是yml配置和启动方式)
1.6.1:application.yml
spring:
application:
name: eureka-ha
profiles:
springms-config-server
active: peer2 # 主要**哪个配置文件
1.6.2 application-peer1.yml
# 配置 eureka 登录密码,输入地址 http://localhost:8761 时候就需要输入这个用户名密码登录进去
security:
basic:
enabled: false
user:
name: admin
password: admin
server:
port: 1003
eureka:
datacenter: SpringCloud # 修改 http://localhost:8761 地址 Eureka 首页上面 System Status 的 Data center 显示信息
environment: Test # 修改 http://localhost:8761 地址 Eureka 首页上面 System Status 的 Environment 显示信息
instance:
hostname: peer3
instance-id: ${spring.application.name}:${server.port}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://admin:[email protected]:1001/eureka,http://admin:[email protected]:1002/eureka
其中aoolication-peer2.yml和appliction-peer3.yml配置剧本相似除了端口号修改
主要说明:client.register.-with-eureka和fetch-regiest为true表示这几个互为客户端并且允许相互注册。service-url:其他2个的url
1.6.3 启动参数设置
(1)eclipse多参数启动
修改名称便于区别
(2)以jar启动添加参数
java -jar xxx.jar --spring.proacitve=peer1
具体的代码稍后发布地址