-
Nacos是springcloud的扩展,注册中心功能通过NacosDiscoveryClient 继承DiscoveryClient,在springcloud中,与Eureka可以无侵入的切换。注册中心可以手动剔除服务实例,通过消息通知客户端更新缓存的实例信息,完整调用链路示例如下:
-
Nacos 的关键特性包括:
- 服务发现和服务健康监测
- 动态配置服务,带管理界面,支持丰富的配置维度。
- 动态 DNS 服务
- 服务及其元数据管理
-
Nacos与Eureka相比优势如下:
Nacos在自动或手动下线服务,使用消息机制通知客户端,服务实例的修改很快响应;Eureka只能通过任务定时剔除无效的服务。
Nacos可以根据namespace命名空间,DataId,Group分组,来区分不同环境(dev,test,prod),不同项目的配置。 -
Nacos的开启
-
下载并启动nacos,检验是否启动成功:浏览器访问 http://127.0.0.1:8848/nacos
-
环境的添加依赖
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring‐boot‐dependencies</artifactId> <version>2.1.3.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐dependencies</artifactId> <version>Greenwich.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring‐cloud‐alibaba‐dependencies</artifactId> <version>2.1.0.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>
- 服务注册
spring: application: name: nacos‐restful‐provider cloud: nacos: discovery: server‐addr: 127.0.0.1:8848
- 服务发现
spring: application: name: nacos‐restful‐consumer cloud: nacos: discovery: server‐addr: 127.0.0.1:8848
- 服务消费
/*改Controller中远程调用的代码*/ //服务id即注册中心的中的服务名 private String serviceId="nacos‐restful‐provider"; @Autowired LoadBalancerClient loadBalancerClient; @GetMapping(value = "/service") public String service(){ RestTemplate restTemplate = new RestTemplate(); //调用服务 //String providerResult = restTemplate.getForObject("http://" + providerAddress + "/service",String.class); ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId); URI uri = serviceInstance.getUri(); String providerResult = restTemplate.getForObject(uri+"/service",String.class); return "consumer invoke | " + providerResult; }
-
负载均衡
- 上边使用的LoadBalancerClient就是一个客户端负载均衡器,具体使用的是Ribbon客户端负载均衡器。 Ribbon在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这是客户端负载均衡。即在客户端就进行负载均衡的分配.
- RoundRobinRule(默认):轮询,即按一定的顺序轮换获取实例的地址;
- 在服务消费方的配置文件中修改默认的负载均衡策略:
nacos‐restful‐provider: #服务提供方的服务名称 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
-