Nacos 致力于发现、配置和管理微服务。提供了一组简单易用的特性集,帮助快速实现动态服务发现、服务配置、服务元数据及流量管理。
可以更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
官方地址:
https://nacos.io/zh-cn/docs/quick-start.html
可以先选择下载window版的,下面会讲解在CenterOS下如何搭建集群。
127.0.0.1:8848/nacos
即可看到nacos的登录页面,用户名和密码都为nacos。
其中:配置管理只要为动态config配置的一些操作(上面有三行是我创建的yaml配置,下面会讲解)。服务管理就是服务注册方面的操作。集群管理为nacos集群的状态。
这里服务提供者,开启两个服务作为集群
分别为127.0.0.1:8091和127.0.0.1:8092
这里这里注意springboot和alibaba.cloud的版本,alibaba.cloud指定的版本为2.1.0,具体换其他版本,可参考官网。
org.springframework.boot
spring-boot-dependencies
2.3.0.RELEASE
pom
import
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.1.0.RELEASE
pom
import
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
server:
port: 8091
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
@RestController
@Slf4j
public class ServerController {
@Value("${server.port}")
private String port;
@GetMapping("/GetTest")
public String GetTest(){
return "无参-服务提供者port:="+port;
}
@GetMapping("/GetTest2")
public String GetTest2(String param){
return "get有参-服务提供者port:="+port+", param:="+param;
}
@GetMapping("/GetTest3/{param}")
public String GetTest3(@PathVariable("param") String param){
return "get restful 有参数-服务提供者port:="+port+", param:="+param;
}
@PostMapping("/PostTest")
public String PostTest(String param){
return "post string参数,服务提供者port:="+port+", param:="+param;
}
@PostMapping("/PostTest2")
public UserEntity PostTest2(@RequestBody UserEntity entity){
log.info(entity.toString());
entity.setUsername("success");
return entity;
}
}
启动8091后,然后修改端口号为8092,再此启动服务,然后查看nacos网页下的信息情况。
如果再服务列表中出现nacos-provider服务,并实例数和健康实例数都为2,则证明服务提供者已经注册到了nacos注册中心上。
加载nacos依赖和服务提供者一样,这里添加下openfeign客户端,方便消费服务。
org.springframework.cloud
spring-cloud-dependencies
Hoxton.SR1
pom
import
org.springframework.cloud
spring-cloud-starter-openfeign
server:
port: 8081
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
@Component
@FeignClient(name = "nacos-provider")
public interface Serverclient {
@GetMapping("/GetTest")
String GetTest();
@GetMapping("/GetTest2")
String GetTest2(@RequestParam("param")String param);
@GetMapping("/GetTest3/{param}")
String GetTest3(@PathVariable("param") String param);
@PostMapping("/PostTest")
String PostTest(@RequestParam("param") String param);
@PostMapping("/PostTest2")
UserEntity PostTest2(@RequestBody UserEntity entity);
}
@RestController
@Slf4j
public class TestFeignController {
@Autowired
Serverclient serverclient;
@GetMapping("/GetTest")
public String GetTest(){
return serverclient.GetTest();
}
@GetMapping("/GetTest2")
public String GetTest2(String param){
return serverclient.GetTest2(param);
}
@GetMapping("/GetTest3/{param}")
public String GetTest3(@PathVariable("param") String param){
return serverclient.GetTest3(param);
}
@GetMapping("/PostTest")
public String PostTest(String param){
return serverclient.PostTest(param);
}
@GetMapping("/PostTest2")
public UserEntity PostTest2(){
UserEntity entity = new UserEntity();
entity.setId(2);
entity.setUsername("admin");
entity.setPasswd("123");
return serverclient.PostTest2(entity);
}
}
@SpringBootApplication
@EnableFeignClients
public class NacosConsumeApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumeApplication.class, args);
}
}
再打开nacos网站,查看服务列表:
然后去浏览器,访问上面controller中的接口,即可访问远程服务了。
再nacos的网页中有配置管理菜单,其中有个配置列表,可点击右边的加号添加配置。
下面创建一个nacos-consumer.yaml配置文件,或nacos-consumer-dev.yaml、nacos-consumer-pro.yaml形式配置可切换的。
最后点击发布,即可在配置列表中看到新增一条数据。
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
server:
port: 8081
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP
file-extension: yaml
profiles:
active: pro
@RestController
@RefreshScope
public class ConfigTestController {
@Value("${bxc.BXCParam}")
private String BXCParam;
@GetMapping("/GetParam")
public String GetParam(){
return "param:="+BXCParam;
}
}
默认的情况下,分布式配置中心的数据存放到本地data目录下,但是这种情况如果nacos集群的话无法保证数据的同步性。从0.7版本增加了支持mysql数据源能力。具体配置如下:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
三台服务器:
主机 |
---|
192.168.31.232 |
192.168.31.232 |
192.168.31.232 |
未完待续!