目录
如何改变Linux的java版本(Nacos要看一下对应的java版本是否正确)
Nacos组件简介
2018年Eureka2.0宣布闭源(但是1.x仍旧为活跃项目),同年的7月份,阿里Nacos宣布开源,并且快速称为国内最受关注的开源产品
Nacos选择进行三个内部产品合并统一开源(Configserver非持久注册中心,VIPServer持久化注册中心,Diamond配置中心)
bin里面放起停脚本,conf配置文件,target放Nacos运行需要的jar包。
cmd是windows,sh是Linux系统
点击startup.cmd
Nacos的启动模式默认是集群模式,穷屌丝没有集群,所以修改文件修改成单机模式。
首先我们需要进入目录
cd Nacos整个文件夹拖动过来
然后cd bin
然后sh startup.sh,下面两句就成啦
输入这个,假如成了,你会看到以下图片http://127.0.0.1:8848/nacos
常见问题
1.集群模式启动
2.端口启动冲突
ps aux | grep 8848 查看端口号的进程,然后进行不同进程的删除
把压缩包放到这个linux里面,然后解压
unzip nacos.zip --解压压缩包
bash startup.sh -m standalone Ubuntun系统启动方式,在bin目录下(使用了单机模式)
如何改变Linux的java版本(Nacos要看一下对应的java版本是否正确)
sudo update-alternatives --config java
选择你想要的数字即可
Eureka和Nacos区别
Eureka需要自己搭建一个服务,Nacos不需要自己搭建服务,组件已经准备好了,只需要我们启动即可(类似于tomcat)
使用Nacos如何完成服务发现和服务注册
1.引入spring-cloud-alibaba的依赖
2.引入Nacos相关的依赖
3.修改配置
4.远程调用
5.测试
启动Linux系统的
bash startup.sh -m standalone
当我们的应用针对9092下线了之后,发现只有9090,9091收到order的申请
服务虽然下线了,但是他还是运行的状态,只不过你放到注册中心,他会不给他发送请求。
针对分配权重,但是实际上分配不生效的问题,如果不支持,如果spring Cloud Alibaba,此类框架仅识别流量值为0,和非0,并不按照Nacos实例中的流量值进行负载均衡
只需要在yml文件spring cloud 下面引入下列代码即可。
loadbalancer:
nacos:
enabled: true
此时我发了十个请求左右,9092只收到了1个,其余是比较多
Nacos的同集群优先访问。
一个公司有多个机房,假如北京和上海,都有机房的话
我们订单服务设置的是在北京,我们希望它尽可能的去访问北京
我们可以发现在这块,下面的两个上海哥,没有一点请求,我们京爷一人单吃十条数据。
在这里我们对9090的北京✌️进行了下线,服务就去找我们的两个上海爷了。
这个负载均衡,我们配置集群之前的权重已经做了,所以不用管。
loadbalancer:
nacos:
enabled: true
Nacos负载均衡:
1.服务上线/下线
2.服务配置权重
3.同集群优先访问 ——要开启Nacos的负载均衡
Nacos的健康检查
Nacos作为注册中心,需要感知服务的健康状态,才能为服务调用方提供良好的服务
Nacos中提供了两种健康检查机制
1.客户端主动上报机制
客户端通过心跳上报方式,告知服务端(nacos注册中心)健康状态,默认心跳间隔5s
nacos会在超过15s未收到心跳后,将实例设置为不健康状态,超过30s将实例给删除
服务器端反向探测机制
nacos主动探知客户端健康状态,默认间隔时间为20s
健康检查失败后,实例会被标记为不健康,不会被立即删除
Nacos服务实例类型
1.临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认类型
2.非临时实例,如果实例宕机,不会从服务列表删除,也可以叫永久实例
Nacos对临时实例,采取的是客户端主动上报机制,对非临时实例,采取服务器端反向探测机制。
我们可以看当,Nacos当前是所有的都是临时实例
此时我们对yml,文件进行修改,想把他定位非临时实例,再次运行,可是却发现,报错,大体信息就是,Nacos会保存临时实例,临时实例不可以修改成非临时实例
如果你之前已经去nacos里面,把data目录里的,protocol目录删除,那你不会爆这个错误,假如报错,那么去吧这个目录删除了。
我们点开发现,临时实例变成了false。
服务节点,默认为临时实例,临时实例,采用客户端主动上报,非临时实例采用的是服务器反向探测。
Nacos环境隔离
1.开发环境
2.测试环境
3.预发布环境
4.发布环境
通常情况下,配置,数据库都是一样的,区别就是:预发布环境不对外,发布环境对外,外面的用户可以访问到。
订单服务 商品服务
开发环境的服务,只能访问开发环境的服务,在这里面,增加一个namespace
他的后面的那个数字来自于这块的命令空间的ID
这个点dev 列表下就放这两个服务。
Nacos的配置中心
当前项目的配置都在代码中,会存在以下问题
1.配置文件修改的时候,服务需要重新部署,微服务架构中,一个服务可能有成百个实例,挨个部署比较麻烦,并且容易出错。
2.多人开发时,配置文件可能需要经常修改,使用同一个配置文件容易冲突
配置中心就是对这些配置项进行统一管理,通过配置中心,可以集中查看,修改,和删除配置,无需再逐个修改配置文件,提高效率的同时,也降低了出错的风险。
1.添加配置
2.引入依赖
3.修改配置文件
注意,服务管理的命名空间不等于配置文件的命名空间。我们需要单独设置配置文件的命名空间。
这个里面的id要求和应用名保持一致。
当我们想切换的时候,就在这个bootstrap.yml里面加上namespace:上面有复制
看下面,我们可以看到很多的listener,还监听了这些文件,如果这三个文件全部配置,那么优先级是哪个最先呢?,第一个首先拼接出来的是name,其次是active(dev),最后是properties
我们可以观察到,这个优先级是最高的,上一个是次高,我们发现,可能越精细,他就越优先?
Error creating bean with name 'distroFilterRegistration' defined in class path resource [com/alibaba/nacos/naming/web/NamingConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate
在这里我想把订单服务和商品服务放到Linux服务器上,由于我之前设置order-service为非临时实例,然后我给他注释掉了,此时我再次申请,它变成了临时服务,然后此时就会报错,因为你的protocol/,它记录着这个实例,此时你需要把这个实例删除,然后再重启服务,(那么我们如何删除实例呢,我们在nacos删除会报错,然后就算把里面的实例下线之后,也会报错),所以我们从本质出发,删除Linux系统里面的protocol/即可。
Nacos和Eureka区别
1.Nacos除了服务发现和注册以外,还提供了配置中心,流量管理和DNS服务等功能
2.CAP理论
Eureka遵循AP原则,Nacos可以切换AP和CP,Nacos根据识别CP或者AP的模式,如果注册Nacos的Client的节点是临时节点,那么Nacos对这个Client节点的效果就是AP,反之就是CP,AP和CP可以混合存在
3.服务发现
Eureka:基于拉模式,Eureka Client会定期从Server拉取服务信息,有缓存,默认每30s拉取一次。
Nacos:基于推送模式,服务列表有变化,实时推送给订阅者,服务端和客户端保持心跳连接。(当移除了一个节点,就会实时推送)