注册中心
- eureka
- 服务端
- 客户端
- 负载均衡
- nacos
- 服务端
- 客户端
- nacos分级存储模型
- 配置集群属性
- nacos环境隔离-namespace
- 临时实例和非临时实例
- Eureka和Nacos的异同
- 负载均衡策略
- 饥饿加载
eureka
服务端
- 依赖
<!-- eureka注册中心服务端依赖-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
- 配置项
server:
port: 10086
spring:
application:
name: eurekaserver
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
- 启动项
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
客户端
- 依赖
<!-- eureka注册中心客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 配置项
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
负载均衡
消费者该如何获取服务提供者具体信息?
- 服务提供者启动时向eureka注册自己的信息
- eureka保存这些信息
- 消费者根据服务名称向eureka拉取提供者信息
如果有多个服务提供者,消费者该如何选择
- 服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何感知服务提供者健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
- eureka会更新记录服务列表信息,心跳不正常会被剔除
- 消费者就可以拉取到最新的信息
nacos
在项目父依赖文件中引入
<!-- nacos依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
服务端
- 服务端启动:nacos安装目录bin文件夹下,打开命令窗口:startup.cmd -m standalone
- 端口修改:修改nacos安装目录conf中的application.properties中的server.port
客户端
- 引入依赖
<!-- nacos注册中心依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 配置项
spring:
cloud:
#nacos端口配置
nacos:
server-addr: localhost:8840
nacos分级存储模型
服务->集群->实例
配置集群属性
- 修改服务生产者配置文件
spring:
cloud:
#nacos端口配置
nacos:
server-addr: localhost:8840
discovery: #集群属性
cluster-name: HZ
- 优先访问集群:修改消费者者配置文件,同时修改负载均衡规则为:com.alibaba.cloud.nacos.ribbon.NacosRule
spring:
cloud:
#nacos端口配置
nacos:
server-addr: localhost:8840
discovery:
cluster-name: HZ #集群名称
- 设置负载均衡权重(nacos特有)
nacos环境隔离-namespace
nacos中服务存储和数据存储最外层都是namespace的东西,用来做最外层隔离
概念
- namespace用来做环境隔离
- 每个namespace都有唯一id
- 不同namespace下的服务不可见
实现:
4. 在nacos控制台命名空间中可以创建namespace,用来隔离不同环境
5. 修改消费者的application.yml配置,添加namespace
spring:
cloud:
nacos:
discover:
namespace: #命名空间ID
临时实例和非临时实例
spring:
cloud:
nacos:
discover:
ephemeral: false # 设置为非临时实例
Eureka和Nacos的异同
同:
- 支持服务注册和拉取
- 支持服务提供者心跳方式做健康监测
异:
- nacos服务端支持主动检测提供者健康状态,临时实例采取心跳模式,非临时实例采取主动检测模式
- Nacos临时实例心跳不正常会被剔除,非临时实例不会
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP模式
负载均衡策略
- 方案一:在客户端启动类中添加
/*修改负载均衡策略写法,方案一,适用于全局*/
@Bean
public IRule randomRule(){
return new RandomRule();
}
- 方案二:客户端配置项中添加
# 修改负载均衡策略写法,方案二
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
饥饿加载
# 饥饿加载
ribbon:
eager-load:
enabled: true # 开启饥饿加载
clients:
- userservice #指定饥饿加载名称,是数组
# - xxxxservice
# - xxxxservice
# - xxxxservice