当Eureka单台注册中心机器 注册超过3w的节点 客户端 那么性能将会下降
Eureka 开始闭源
当Zookeeper 单台节点超过2k 那么性能会降低
zookeeper不支持 web控制台管理
Consul
Consul 节点超过5k那么 性能降低 测验显示 超过1k 就已经开始降低性能了
Consul 是GoLang 语言开发 对java 不友好
很牛B 节点可以部署10万+性能不会影响 经过alibaba 内部100万的考验
支持 web客户端给、控制台管理
可以实现限流 提供了第三方集成监控插件 默认自带配置中心
Nacos 1.1版本 支持灰度配置和地址服务器模式
下载网站 [https://github.com/alibaba/nacos/releases](https://github.com/alibaba/nacos/releases)
启动服务器
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
启动命令:
cmd startup.cmd
或者双击startup.cmd运行文件。
运行成功
=============================================================================
首先,Nacos是一个服务注册和服务发现的注册中心,在Spring Cloud中,可以替代Eureka的功能,我们先聊一下Nacos如何和Spring Cloud集成做一个注册中心。
整体流程为:
先启动注册中心Nacos
启动服务的提供者将提供服务,并将服务注册到注册中心Nacos上
启动服务的消费者,在Nacos中找到服务并完成消费
新建一个producer的项目,项目依赖如下:
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
com.springcloud
producer
0.0.1-SNAPSHOT
producer
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
0.9.0.RELEASE
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
增加Nacos的服务发现的依赖:spring-cloud-starter-alibaba-nacos-discovery,根据版本SpringCloud和SpringBoot的版本,这里我们使用0.9.0.RELEASE版本
server:
port: 9000
spring:
application:
name: spring-cloud-nacos-producer
cloud:
nacos:
discovery:
server-addr: localhost:8848
package com.springcloud.producer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
package com.springcloud.producer.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(@RequestParam String name) {
return "hello "+name+ "";
}
}
启动服务producer,在浏览器访问链接:http://localhost:9000/hello?name=nacos, 可以看到页面显示hello nacos,producer is ready。
打开Nacos显示页面,可以看到服务spring-cloud-nacos-producer正常上线。
到这里,我们的服务提供者已经正常搭建完毕。
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.6.RELEASE
com.spring
nacos-cosumers
0.0.1-SNAPSHOT
nacos-cosumers
Demo project for Spring Boot
1.8
Greenwich.SR2
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
0.9.0.RELEASE
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
这里增加了spring-cloud-starter-openfeign依赖包
server:
port: 8080
spring:
application:
name: spring-cloud-nacos-consumers
cloud:
nacos:
discovery:
server-addr: localhost:8848
package com.spring.nacoscosumers;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosCosumersApplication {
public static void main(String[] args) {
SpringApplication.run(NacosCosumersApplication.class, args);
}
}
创建一个remote接口
package com.spring.nacoscosumers.remote;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name= "spring-cloud-nacos-producer")
public interface HelloRemote {
@RequestMapping(value = "/hello")
String hello(@RequestParam(value = "name") String name);
}
package com.spring.nacoscosumers.controller;
import com.spring.nacoscosumers.remote.HelloRemote;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
HelloRemote helloRemote;
@RequestMapping("/hello/{name}")
public String index(@PathVariable("name") String name) {
return helloRemote.hello(name);
}
}
注意:账号默认是 nacos
启动服务消费者nacos-consumers,打开浏览器访问链接:http://localhost:8080/hello/nacos, 这时页面正常返回hello nacos,producer is ready,证明我们的已经通过Nacos作为注册中心已经正常提供了服务注册与发现。