前面我们讲了Eureka是用来管理微服务通信地址清单的,其他客户端需要注册到服务中心,它既可以是服务端,也可以是客户端。我这里使用搭建集群的方式。在父模块上面新建一个子模块,勾选一个maven-quickstart.骨架 引入eurekaServer服务端jar包。
当然独立模式和集群模式配置文件的方式肯定有所区别,下面是官网地址,有兴趣的可以点进去学习,
官网文档地址.
独立模式配置:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
eureka -server 包
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
因为我使用集群配置,使用三台主机,但是我只有一台电脑,所以我
在hosts文件地址的下添加了三个域名地址。用来模拟三台本地主机,方便区分,具体怎么修改可以自行百度
然后新建一个主配置类,很重要
@SpringBootApplication //此注解,声明该类未主配置类
@EnableEurekaServer //自动开启eurekaServer服务
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class);
}
}
接下来写配置文件,在resources目录下新建文件 application.yml,注意看集群配置方式,这里使用集群配置注册中心,保证三个注册中心数据数据一致,所以他们之间需要相互注册,所以我配置中心地址填了三个地址,后面配置的服务端的地址也都是一样,上面为公共配置代码,该配置对下面所有环境的配置都有效:
eureka:
client:
serviceUrl:
defaultZone: http://peer1:1010/eureka/,http://peer2:1011/eureka/,http://peer3:1012/eureka/ #配置中心地址
instance:
prefer-ip-address: true #使ip地址注册
spring:
application:
name: eureka-server #公共的服务名 ,他们的服务名要一致
profiles:
active: peer1 #当前启动选择的环境,对应配置下面的环境名
下面为三个环境配置的代码
--- # 由于使用单文件配置多环境,---表示单个环境
server:
port: 1010
eureka:
instance:
hostname: peer1 #主机名
instance-id: eureka-server:1010 #实列id地址
spring:
profiles: peer1 #环境名
---
server:
port: 1011
eureka:
instance:
hostname: peer2
instance-id: eureka-server:1011
spring:
profiles: peer2
---
server:
port: 1012
eureka:
instance:
hostname: peer3
instance-id: eureka-server:1012
spring:
profiles: peer3
配置完成后启动peer1 ,启动时会报Connect to peer3:1012 timed out ,这是正常的,因为我们还没有启动另外两个服务器
注意点idea右上角修改idea的配置
2007版本的这里代表启动单个服务器实例,把勾去掉
2007以后的版本,是启动多个实例,需要勾上,不然无法启动多个服务器
浏览器访问地址:peer1:1010
说明已经注册成功。修改当前环境名启动peer2和peer3
启动成功。分别访问peer2:1011和peer3:1012 没有问题
这里说下eureka-server的工作原理
微服务的其中一个特点是服务之间需要进行网络通信,服务器之间发起调用时调用服务得知道被调用服务的通信地址,试问当微服务数量成百上千之多,程序员该如何管理众多的服务通信地址,对于随时新增加的微服务和下线的微服务,又应该如何去动态添加和删除这些微服务的通信地址呢?所以手工管理服务的通信地址是一件遥不可及的事情,我们需要借助一个强大的工具帮我们实现这一功能 - Eureka,同类型的组件还有 zookeeper,consul等
服务注册
Eureka是一个服务注册与发现组件,简单说就是用来统一管理微服务的通信地址的组件,它包含了EurekaServer 服务端(也叫注册中心)和EurekaClient客户端两部分组成,EureakServer是独立的服务,而EurekaClient需要集成到每个微服务中。
微服务(EurekaClient)在启动的时候会向EureakServer提交自己的服务信息(通信地址如:服务名,ip,端口等),在 EurekaServer会形成一个微服务的通信地址列表存储起来。 — 这叫服务注册
服务发现
微服务(EurekaClient)会定期(RegistryFetchIntervalSeconds:默认30s)的从EureakServer拉取一份微服务通信地址列表缓存到本地。当一个微服务在向另一个微服务发起调用的时候会根据目标服务的服务名找到其通信地址,然后基于HTTP协议向目标服务发起请求。—这叫服务发现
服务续约
另外,微服务(EurekaClient)采用定时(LeaseRenewalIntervalInSeconds:默认30s)发送“心跳”请求向EureakServer发请求进行服务续约,其实就是定时向 EureakServer发请求报告自己的健康状况,告诉EureakServer自己还活着,不要把自己从服务地址清单中剔除掉,那么当微服务(EurekaClient)宕机未向EureakServer续约,或者续约请求超时,注册中心机会从服务地址清单中剔除该续约失败的服务。
下面附带一张图,帮助大家理解它的工作原理:
以上的工作原理内容来之博客:
以上工作原理内容参考自一位大牛的博客,点击查看原文
至此eureka的配置就完成了,接下来我们配置一个user客户端