服务提供者:
暴露接口给其他微服务调用
服务消费者:
调用其他微服务提供的接口
消费者与提供者的关系是相对的,根据业务情况来看,一个服务既可以是消费者也可以是提供者
关于地址信息获取
不能采用硬编码形式,消费者可能要调用多个提供者的地址,用硬编码的话就只能调用其中一个提供者的地址。
启动类
多例部署,为了防止端口冲突,需要修改端口设置
@LoadBalanced 表示负载均衡
分析源码后
两种方式的作用范围不同
代码方式作用全体
配置文件方式只针对某个服务而言
如果要对多个服务器进行饥饿加载
什么是Nacoshttps://www.jianshu.com/p/39ade28c150d
Nacos既可以作为注册中心,又可以作为配置中心
注册中心
提供一个存储介质,供服务提供者和服务消费者共同连接,而存储的主要信息就是这里的 URL。
一个完整的注册中心需要实现以下功能:
配置中心https://blog.csdn.net/qq_46112274/article/details/122620460
Nacos下载地址
windows版
将nacos-server-1.x.x.zip包解压到任意非中文目录
bin:启动脚本
conf:配置文件
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改application.properties配置文件中的端口:
server.port=8848
进入./nacos/bin目录下,打开终端。
通过startup.cmd脚本启动
.\startup.cmd -m standalone
按住ctrl,单击Console中的地址,可以进入控制台
默认的账号密码都是nacos
父工程:
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.2.5.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
客户端:
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
服务分级存储模型划分三级
第一级:服务
第二级:集群
第三级:实例
可以发现比Eureka多了一层集群
为什么要有集群?
与机房内的本地调用相比,跨集群调用的延迟较高。为了降低延迟,引入集群的概念,当本地集群不可访问时,再去访问其他集群。
实例部署中服务器设备的性能有差异,我们希望性能好的机器承担更多的用户请求,为此我们可以对服务实例的权重进行设置。
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
控制台
我们既然已经将服务实例划分为集群,为什么还要有环境隔离?
集群是地域划分,实际当中我们还有开发环境、生产环境的变化,需要依据这些环境变化来进行环境隔离
Nacos提供了环境隔离功能。
group:将业务相关度比较高的服务放到一个组
默认情况下,所有 service、data、group 都在同一个 namespace,名为 public(保留空间):
就能在页面看到一个新的 namespace:
给微服务配置 namespace 只能通过修改配置来实现。
例如,修改 order-service 的 application.yml 文件:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间ID
重启 order-service 后,访问控制台。
public
dev
此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:
服务提供者
如图,在Nacos中,服务提供者有了临时实例和非临时实例之分。
对于临时实例,与eureca相同,采用心跳监测方式,服务提供者每隔一段时间向nacosserver发送心跳监测数据,报告健康状况,一旦不健康了,就让它从服务列表消失;
对于非临时实例,nacos会主动询问它的健康状况,当它不健康了,只要不手动关闭它,并不会将它从列表中剔除,而是等待它恢复健康。
配置一个服务实例为非临时实例
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
服务消费者
nacos采取pull与push相结合的方式,当服务提供者发生变更时,会主动推送变更消息,更加快速地更新服务列表缓存,从而提高效率,减少错误。
主动询问对NacosServer的压力比较大,所以一般推荐临时实例。