下载nacos服务端
在GitHub(https://github.com/alibaba/nacos/releases)下载nacos service并解压(Windows版本)。
在conf文件夹里面的application.properties里面可以修改nacos service的启动端口,默认8848
### Default web server port:
server.port=8848
启动nacos service
Windows命令控制台进入bin文件夹执行命令:startup.cmd -m standalone
访问nacos控制端(http://localhost:8848/nacos),默认账号密码都是“nacos”,进入下面的界面,说明nacos服务端就安装成功了。
nacos客户端引入
在父工程pom文件,dependencyManagement标签添加spring alibaba cloud依赖管理
<dependencyManagement>
<dependencies>
<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>
</dependencies>
</dependencyManagement>
在子模块添加nacos客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
添加application.yml系统配置
spring:
application:
name: user-service # 服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos服务地址,这里不是全URL 只是ip:port
然后启动子模块,在nacos服务端就可以看到注册信息
nacos负载均衡
nacos和eureka都实现了同样的spring规范,所以很多代码都可以复用,实现负载均衡的方式
配置类注入@Bean
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
// 更改eureka负载均衡配置,方式一:这个加一个bean 这个方式是全局的所有的服务都将用这个策略
@Bean
public IRule randomIRule(){
return new RandomRule();
}
}
方式二:配置文件
user-service:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
nacos 服务分级存储模型
nacos服务分级存储模型是在原来服务的基础上增加了集群和实例。
集群:如有不同的机房,成都一个机房,上海一个机房,重庆一个机房,就可以在每个地区布置一个集群,成都的用户访问成都的集群,上海的用户访问上海的集群,这样速度会快很多。
实例:一个机房的某台机子部署了某个服务,例如服务器A部署了userservice的服务
设置实例的集群属性
在服务的配置文件application.yml添加配置,重启服务
spring:
application:
name: user-service # 服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: chongqing #集群名称
然后再nacos控制端就可以看见不同集群对应的实例
到这一步还没有实现访问同集群的服务,如果选择服务是负载均衡做的,所以还需要修改负载均衡策略,实现集群访问。
user-service:
ribbon:
NFLoadBalancerRuleClassName:com.alibaba.cloud.nacos.ribbon.NacosRule
如果同一个集群里面有多个相同的实例,这时候nacos采用的是随机访问。但是也可以通过配置实例权重实现比例访问。
服务管理-》服务列表-》点击“详情”-》选择实例点击“编辑”-》修改权重。
这样就可以实现,权重越高的服务被访问的概率就越大。