在微服务的使用中,我们会面临线上运行几十个甚至更多的服务。这时候,需要一个提供服务注册与发现的的机制。
在spring-cloud 家族中,提供了 eureka,供我们实现。
Eureka由 server 与 client 组成:
Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的信息(例如IP、端口、微服务名等),Eureka Server会存储这些信息。
Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。
微服务启动后,会周期性(默认30s)向Eureka Server发送心跳以续约自己的“租期”。
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90s)。
默认情况下,Eureka Server同时也是Eureka Client。多个Eureka Server实例,互相之间通过复制的方式,来实现服务注册表中数据的同步。
Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势 —— 首先,微服务无须每次都查询Eureka Server,从而降低了Eureka Server的压力;其次,即时Eureka Server所有节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用。
综上,Eureka通过心跳检查、客户端缓存等机制,提供了系统的灵活性、可伸缩性和可用性(摘自网络)。
SERVER:
下面实现单节点Eureka Server ,注:单节点不能保证服务的高可用,实际生产环境中,需要构建集群环境。
利用spring 提供的在线工程构建器,填写Group 与 Artifact,随后点击generate-project,下载下来,
https://start.spring.io/
在ide 中打开:
在pom.xml中,添加依赖:
1.8
1.8
Finchley.M8
spring-cloud-starter-netflix-eureka-server
spring-boot-starter-test
test
spring-cloud-dependencies
$
pom
import
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
随后在 TangyuanEurekaDemoApplication类中,添加@EnableEurekaServer注解,声明这是一个Eureka Server。
增加配置:
application.properties
server.port=8761
#表示是否将自己注册到Eureka Server,默认为true。
#表示是否从Eureka Server获取注册信息,默认为true。
#设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
随后访问:
http://localhost:8761/
可以看到,Eureka 服务已经启动了,但是现在还没有服务注册进来。
CLIENT
再使用https://start.spring.io/构建一个用户管理服务:
tangyuan-micrservice-client-usermanage
随后在pom.xml中添加依赖,完整的pom.xml如下:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
tangyuan-micrservice-client-usermanage
0.0.1-SNAPSHOT
jar
tangyuan-micrservice-client-usermanage
Demo project for Spring Boot
spring-boot-starter-parent
2.0.2.RELEASE
1.8
Finchley.M8
spring-boot-starter
spring-boot-starter-test
test
spring-boot-starter-web
spring-boot-starter-actuator
spring-cloud-starter-netflix-eureka-client
spring-cloud-dependencies
$
pom
import
spring-boot-maven-plugin
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
application.properties
中添加:
spring.application.name=ms-usermanage #实例名称
Spring boot 启动类中,添加注解;@EnableDiscoveryClient,表示这是一个服务注册发现的客户端
完整类如下:
@SpringBootApplication
@EnableDiscoveryClient
public classTangyuanMicrserviceClientUsermanageApplication{
public static voidmain(String[]args) {
SpringApplication.run(TangyuanMicrserviceClientUsermanageApplication.class,args);
}
}
启动用户管理服务,
随后可以看到,http://localhost:8761/监测中:刚刚添加的userManage 实例,已经注册进去了。
领取专属 10元无门槛券
私享最新 技术干货