Nacos
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service
Nacos: Dynamic Naming and Configuration Service
Nacos = Eureka+Config+Bus
1. 去哪下:
https://github.com/alibaba/Nacos
2. 官网文档:
https://nacos.io/zh-cn/index.html
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery
3. 与其他注册中心的区别
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
4. 下载与安装、启动
4.1 windows 版本
官网选择一个稳定版下载
https://github.com/alibaba/nacos/releases/tag/1.4.3
安装后解压安装包,
直接运行bin目录下的startup.cmd
命令运行成功后直接访问http://localhost:8848/nacos
默认账号密码都是nacos
页面:
4.2 docker版本
Docker 下载安装Nacos, 暂用 1.4.1
docker pull nacos/nacos-server:1.4.1
Nacos 启动:
单例1
docker run -d --name nacos -p 8848:8848 --env MODE=standalone --env NACOS_SERVER_IP=192.168.226.128 nacos/nacos-server:1.4.1
单例2
docker run -d -it \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \ (要依赖的容器)
-e MYSQL_SERVICE_HOST=127.0.0.1 \ (当前mysql容器IP地址)
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \(要连接的数据库)
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \(用root用户登录连接虚拟机时的密码)
-p 8848:8848 \
--name nacos \
---- 这里注释掉,不保持启动 --restart=always \
nacos/nacos-server:1.4.1
原文链接:https://blog.csdn.net/m0_53151031/article/details/123118920
集群
docker run -d --name nacos-cluster -p 8848:8848 \
--env NACOS_SERVERS=192.168.226.128,192.168.226.128,192.168.226.128 \
--env NACOS_SERVER_IP=192.168.226.128 \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=127.0.0.1 \
--env MYSQL_SERVICE_DB_NAME=mysql \
--env MYSQL_SERVICE_USER=root \
--env MYSQL_SERVICE_PASSWORD=123456 \
--env MYSQL_DATABASE_NUM=1 \
nacos/nacos-server:1.4.1
参数说明:
NACOS_SERVERS : 集群节点信息
NACOS_SERVER_IP : 服务IP,多网卡模式下建议指定
SPRING_DATASOURCE_PLATFORM : 使用数据库类型
MYSQL_SERVICE_HOST : MySQL数据库地址
MYSQL_SERVICE_DB_NAME : 数据库名称
MYSQL_SERVICE_DB_NAME : 数据库用户名
MYSQL_SERVICE_PASSWORD : 数据库密码
MYSQL_DATABASE_NUM : 数据库数量,默认就是1,可以不填写
至此集群就搭建完成。可以通过docker日志命令查询nacos的日志信息(docker logs -ft --tail 200 nacos-cluster )。
登录:
http://192.168.226.128:8848/nacos
账号:nacos
密码:nacos
5. 基于Nacos的服务提供者provider
5.1 pom.xml
父pom文件,添加如下依赖
<!--Spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.pyh.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-providerzk-payment8004</artifactId>
<dependencies>
<!-- Springboot 整合zookeeper客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.pyh.springcloud</groupId>
<artifactId>cloud-api-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
5.2 application.yaml
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 192.168.226.128:8848 # 配置 nacos 地址
management:
endpoints:
web:
exposure:
include: "*" # 暴露监控端点
5.3 controller
package com.pyh.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id){
return "server port:"+serverPort + "\t id:"+id;
}
}
5.4 添加另一个服务9002,从9001 拷贝出来
6. 基于Nacos的服务消费者consumer
6.1 pom, 与5.1的一样
6.2 yaml
server:
port: 83
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.226.128:8848 # 配置 nacos 地址
management:
endpoints:
web:
exposure:
include: "*" # 暴露监控端点
# 消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者), 可以在程序运行时@Value来调用
service-url:
nacos-user-service: http://nacos-payment-provider
6.3 Configuration, 切记要加上@LoadBalanced
package com.pyh.springcloud.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
6.4 controller
@RestController
@Slf4j
public class OrderNacosController {
@Value("${service-url.nacos-user-service}")
private String serviceURL;
@Resource
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/nacos/{id}")
public String getPaymentInfo(@PathVariable("id") Integer id){
return restTemplate.getForObject(serviceURL+"/payment/nacos/"+id,String.class);
}
}