大家好,我是DJ李淳罡,微服务是现在面试中必不可少的一项技能了,掌握微服务,不仅能够加薪升职,还能在面试中,底气十足,不怯场,不怕被压薪资。所以今天就特意开了一个微服务专栏,给大家从0-1的介绍微服务知识,由浅入深,逐渐掌握,感兴趣的可以订阅收藏,防止下次找不到了哦~
前面几篇讲了微服务的概念性的知识点以及如何利用SpringBoot搭建一个简易版的微服务。从前面了解到的微服务的概念中,它有一个服务中心,所有的微服务组件都要注册到服务中心上,可见它的重要性,今天就给大家讲一个微服务注册中心----Eureka
。准备了几天,今天正式进入微服务大门了!
Eureka
是Netflix
开发的服务发现框架,本身是一个基于REST的服 务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
Spring Cloud将它集成在其子项目spring- cloud-netflix
中,以实现Spring Cloud的服务发现功能。
它包含了两个组件:Eureka Server
和Eureka Client
。
Eureka Server
提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观地看到。
它支持高可用配置。依托于强一致性提供良好的服务实例可用性,可以应对多种不同的故障场景。
如果Eureka以集群方式部署,当集群中有分片出现故障时,那么Eureka就转入自我保护模式。它允许在分片故障期间继续提供服务的发现和注册,当故障分片恢复运行时,集群中的其他分片会把它们的状态再次同步回来。
Eureka Client是一个Java客户端,用于简化与Eureka Server的交互, 客户端同时也是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server
发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳, Eureka Server将会从服务注册表中把这个服务节点移除(默认为90 秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供 了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以 利用缓存中的信息消费其他服务的API。因此,Eureka通过心跳检查、 客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
市面上服务中心组件,并不少,为啥选择Eureka作为服务发现组件呢?
Eureka架构如图所示。
以上是Eureka官方的架构图,大致描述了Eureka集群的工作过程。 图中包含的组件非常多,可能比较难以理解,我们用通俗易懂的语言解释一下:
Application Service
:相当于服务提供者。Application Client
:相当于服务消费者。Make Remote Call
:可以简单理解为调用RESTful API
。us-east-1c、us-east-1d
:都是zone
,它们都属于us-east-1这个region。从这个架构图中,可以简单性的看出一些服务逻辑,比如:
Eureka Client
是一个Java客户端,用于简化与Eureka Server的交互。Eureka Server
提供服务发现的能力,各个微服务启动时,会通过 Eureka Client向Eureka Server注册自己的信息(例如网络信息),Eureka Server会存储该服务的信息。Eureka Server
发送心跳(默认周期为30秒)以续约自己的信息。如果Eureka Server在一定时间内 没有接收到某个微服务节点的心跳,Eureka Server将会注销该微服务节点(默认为90秒)。因此,Eureka
通过心跳检测、健康检查和客户端缓存等机制,提高了系统的灵活性、可伸缩性和可用性。
Eureka Server
是注册中心服务,属于Netflix
组件中的一个功能,它提供了完整的Service Registry
和Service Discovery
的实现。所谓单点模式 也叫作Standalone Mode
,顾名思义就是只有一台Eureka Server
服务器, 所有的微服务均注册到一个独立的服务中心。
Eureka Server在开发中的典型配置如下:
server:
port: 8761 #声明eureka端口号
eureka:
instance:
hostname:localhost #声明eureka主机
client:
register-with-eureka:false # 是否注册到其他Eureka 服务
fetch-registry:false # 是否从其他Eureka 服务获取注册信息
service-url:
defaultZone:http://${eureka.instance.hostname}:{server.port}/eureka/
Eureka Server
。@EnableEurekaServer
注解。application.yml
,添加关于Eureka Server的配置。项目创建还是在IDEA中新建项目,选择使用Spring Initializr向导生成,添加依赖时只选择Eureka Server即可。
对第2步中生成的Spring Boot项目进行配置,修改如下:
@EnableEurekaServer
注解在启动类上添加@EnableEurekaServer
注解,从而将项目作为Spring Cloud
中的注册中心,此时,可以将@EnableEurekaServer
注解看作是一 个开关,开启时,会激活相关配置,成为注册中心。参考代码如下:
@SpringBootApplication
@EnableEurekaServer
public class SpringCloudEurekaServer {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaServer.class, args);
}
}
application.yml
文件按照以下模板进行配置,通过eureka.client.registerWithEureka:false
和fetchRegistry:false
来表明自己是一个Eureka Server。
server:
port: 8761 #声明eureka端口号
eureka:
instance:
hostname:localhost #声明eureka主机
client:
register-with-eureka:false # 是否注册到其他Eureka 服务
fetch-registry:false # 是否从其他Eureka 服务获取注册信息
service-url:
defaultZone:http://${eureka.instance.hostname}:{server.port}/eureka/
启动项目后,我们可以通过localhost:8761,来访问项目,当出现如下时,即是成功。
至此,我们已经创建好了一个Eureka Server。
Spring Boot项目打包成可以运行的jar包,步骤说明如下(这里用的开发环境是IDEA)。
把Spring Boot打包成jar的形式,需要在pom.xml文件对应以下代码:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
通过maven==》package,即可打包成jar包
然后将打好的包,发布到任意已经安装好JDK 1.8的主机上, 并使用以下命令启动它:
#java -jar springcloud-xxx.jar
最后,将可运行的jar包拷贝到一台Linux机器上,并在Linux控制台上启动它,如图所示。
本篇文章实现了利用springBoot完成了 Eureka Server的单点模式,只开发了一个server服务。在下篇文章中会开发出client 客户端服务,实现服务的注册与调用。