上一篇:SpringCloud-----(1)微服务基础概念
前言 |
SpringCloud微服务已经是目前互联网应用开发的一个趋势,简单来讲,其实就是将我们的一个整体的项目拆分成多个小的模块,这样使得我们的项目扩展更加灵敏。Eureka是Springcloud的服务与注册中心。作为SpringCloud的第一个组件,它的主要作用是负责SpringCloud中各个相互独立的服务之间相互调用。Eureka
相当于 Zookeeper
+Dubbo
,服务提供者将自己提供的服务注册到注册中心,然后Eureka将注册的服务存储到一个双层结构的Map中。Eureka
包含了两个组件:eureka server
和eureka client
。
Eureka Server
提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client
是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
现在社区里面关于Eureka
的概念知识点有很多,我简单记录一下自己在项目中使用Eureka
过程。
Eureka Server
是服务注册功能的服务器,是服务注册中心。系统中的其他微服务,可以通过Eureka Client
连接到注册中心并保持心跳连接,下图中的服务消费者
和服务提供者
都是Eureka Client
。
创建项目 |
一、创建一个 Eureka Server
1.创建项目的时候,勾选上依赖Eureka Server
2.在项目的启动类上添加注解:@EnableEurekaServer
,在此注解中导入了一个EurekaServerMarkerConfiguration
类,此类会向spring容器中添加一个bean,添加此注解之后,eureka server
将会和spring 容器一起启动。
@SpringBootApplication
@EnableEurekaServer
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
3.在application
配置文件中配置eureka server
注册信息。
#设置项目端口
server:
port: 8082
#设置 eureka 注册中心url
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
4.此时启动该项目,访问localhost:8082
,可以看到可以访问eureka
页面。
上图中红框内表示当前的eureka
注册中心注册了哪些服务,从后面箭头所指的端口中可以看出,8082端口就是我们在配置文件中本项目的端口,也就是说,eureka
注册中心将自己也注册上了。可以在配置文件中进行如下设置:
#设置 eureka 注册中心url
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
#不将自己注册到 eureka server
register-with-eureka: false
重启项目之后,重新访问localhost:8082
说明现在eureka server上面没有注册服务。
二、创建一个 Eureka Client
1.添加依赖
2.在启动类applicaiton
中添加注解:@EnableDiscoveryClient
,此注解的作用与上文中的@EnableEurekaServer
类似。
@SpringBootApplication
@EnableDiscoveryClient
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication.class, args);
}
}
3.在properties
配置文件中配置注册url
#设置项目的端口号
server:
port: 8083
#设置要注册的url(也就是 eureka server的url地址)
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
4.启动client
项目,再访问:localhost:8082
发现端口为8083的client
成功注册到eureka
了。但是该注册的服务名称为UNKNOWN
,这里我们可以再client
项目的properties
配置文件中设置服务的名称,整体配置如下:
#设置项目的端口号
server:
port: 8083
#设置要注册的url
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
#设置应用的名称
spring:
application:
name: eurekaClient
重启项目,再访问localhost:8082
页面:
这样就可以看到注册的应用名称变成了client
。
在eureka
的控制台页面,有时候可能会出现下面的红字提示,
遇到这种情况先不要慌,这是eureka
的自我保护机制给予的提示,Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期(什么意思?就是Eureka Server
在短时间内失去过多的客户端的时候,Eureka就会进入自我保护模式,将注册的服务信息全都保护起来,不再被删除。直到客户端重新连接注册上Eureka Server
后,自我保护模式退出),但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。
清楚了根本原因之后,只需要在eureka server
项目的配置文件中做如下配置:
#设置项目端口
server:
port: 8082
#设置 eureka 注册中心url
eureka:
client:
service-url:
defaultZone: http://localhost:8082/eureka/
#不将自己注册到 eureka server
register-with-eureka: false
#关闭eureka server自我保护机制(开发环境可以关闭,但是生产环境不建议关闭)
server:
enable-self-preservation: false
关闭eureka server
的自我保护机制,上述问题就解决了,但是注意:在开发环境中我们可以关闭自我保护机制,但是在项目的生产环境中,不建议将它关闭。
有关于eureka 的配置可以参考一下:eureka 常用配置
到这里基本上eureka server
项目和eureka client
项目就注册完成了。其实主要就是启动类上添加注解,再到配置文件中进行一系列配置就Ok了