文章目录
目录
1. 什么是注册中心?
在最初的架构体系中, 集群的概念还不那么流行, 且机器数量也比较少, 此时直接使用DNS+Nginx就可以满足几乎所有服务的发现. 相关的注册信息直接配置在Nginx. 但是随着微服务的流行与流量的激增, 机器规模逐渐变大, 并且机器会有频繁的上下线行为, 这种时候需要运维手动地去维护这个配置信息是一个很麻烦的操作. 所以开发者们开始希望有这么一个东西, 它能维护一个服务列表, 哪个机器上线了, 哪个机器宕机了, 这些信息都会自动更新到服务列表上, 客户端拿到这个列表, 直接进行服务调用即可. 这个就是注册中心。
在注册中心中,通常涉及以下几个角色,每个角色在微服务架构中扮演着重要的角色:
-
服务提供者(Service Provider):负责向注册中心注册自己的服务实例。服务提供者在启动时将其服务信息(如服务名称、地址、端口等)注册到注册中心。
-
服务消费者(Service Consumer):需要调用其他服务的客户端或微服务。服务消费者通过注册中心查询可用的服务实例,以便进行服务调用。
-
注册中心(Registry):负责管理服务的注册和发现。注册中心维护一个服务列表,处理服务的注册、注销、健康检查等功能。
2.常见的注册中心
-
Eureka:
- 描述:由Netflix开发的服务注册与发现工具,支持RESTful API,易于与Spring Cloud集成。
- 特点:提供自我保护机制,支持客户端负载均衡。
-
Zookeeper:
- 描述:Apache提供的分布式协调服务,常用于服务注册和发现。
- 特点:提供高可用性和一致性,适合需要强一致性的场景。
-
Nacos:
- 描述:阿里巴巴开源的服务发现和配置管理平台,支持动态服务发现和配置管理。
- 特点:支持多种服务发现模式,易于与Spring Cloud集成。
3 . Eureka
Eureka是Netflix OSS套件中关于服务注册和发现的解决方案。Spring Cloud对Eureka进行了集成,并作为优先推荐方案进行宣传。虽然目前Eureka 2.0已经停止维护,新的微服务架构设计中,也不再建议使用,但是目前依然有大量公司的微服务系统使用Eureka作为注册中心。
构建项目 创建模块 order-server 和 product-server
在各自的pom文件中引入eureka依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
接着创建eureka-server 作为eureka的服务端 接着在pom文件中引入依赖, 因为这里是服务端,所以一路的依赖是服务端的依赖,和上面的不太一样
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
搞定之后,开始配置文件的编写,直接拷贝,都一样
服务端配置文件
server: port: 10010 spring: application: name: eureka-server eureka: instance: hostname: localhost client: fetch-registry: false # 表⽰是否从Eureka Server获取注册信息,默认为true. # 因为这是⼀个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据, # 这⾥设置为false register-with-eureka: false # 表⽰是否将⾃⼰注册到Eureka Server,默认为true.由于当前应⽤就是Eureka Server,故⽽设置为false. service-url: # 设置 Eureka Server的地址,查询服务和注册服务都需要依赖这个地址. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
客户端配置文件
spring: application: name: order-server #配置服务名称#配置eureka地址 eureka: client: service-url: defaultZone: http://127.0.0.1:10010/eureka
在ioc容器中注册RestTemplate对象来实现远程调用
可以直接在启动类中使用@Bean注解直接添加也可以通过配置类的方式
接着在方法中直接调用
4 . Nacos
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高
Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。
主要差异在于:
-
依赖不同
-
服务地址不同
引入依赖
在父工程的pom文件中的<dependencyManagement>
中引入SpringCloudAlibaba的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
编写配置文件
spring:
cloud:
nacos:
server-addr: localhost:8848
集群配置
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
环境隔离
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
5 . Nacos与Eureka的区别
Nacos的服务实例分为两种l类型:
-
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
-
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
配置一个服务实例为永久实例:
spring: cloud: nacos: discovery: ephemeral: false # 设置为非临时实例
Nacos和Eureka整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:
-
Nacos与eureka的共同点
-
都支持服务注册和服务拉取
-
都支持服务提供者心跳方式做健康检测
-
-
Nacos与Eureka的区别
-
Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
-
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
-
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
-
Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
-
总结
以上就是这篇博客的主要内容了,大家多多理解,下一篇博客见!