



nacos 服務(wù)提供者、消費(fèi)者、配置demo
https://github.com/zhiguicai/springcloudalibabademo
一、nacos安裝&運(yùn)行
nacos官方文檔
nacos官方社區(qū) -segmentfault--推薦
Spring Cloud Nacos實(shí)現(xiàn)分布式環(huán)境下的配置管理和服務(wù)注冊發(fā)現(xiàn)-segmentfault
Java微服務(wù)新生代之Nacos--安裝、集群、集成
nacos修改默認(rèn)的用戶名密碼
java微服務(wù)Nacos配置管理
SpringCloud - 服務(wù)注冊與配置中心Nacos使用詳解2(同一個(gè)服務(wù)器上啟動三Nacos-集群部署)
IntelliJ IDEA 中創(chuàng)建maven項(xiàng)目
SpringCloud Alibaba Nacos服務(wù)注冊和配置中心--推薦*
####下載
#下載
git clone https://github.com/alibaba/nacos.git
#或直接下編譯好的 [nacos-server-2.0.0.zip](https://github.com/alibaba/nacos/releases/download/2.0.0-bugfix/nacos-server-2.0.0.zip)
#nacos1.4.0 https://github.com/alibaba/nacos/releases/download/1.4.0/nacos-server-1.4.0.tar.gz
#安裝到本地倉庫
cd nacos/
mvn -Prelease-nacos clean install -U
#Maven 方式打包后會在當(dāng)前目錄 distribution/target 下生成兩個(gè)壓縮包 nacos-server-1.0.1.tar.gz 和 nacos-server-1.0.1.zip,任意解壓一個(gè)使用即可。
#解壓&運(yùn)行
tar -xvf nacos-server-2.0.0.tar.gz
cd ./nacos/bin
./startup.sh -m standalone
centos 單例運(yùn)行

win10 startup.cmd之前需要修改 set MODE="standalone" 、或配置集群信息

err運(yùn)行錯(cuò)誤原因:nacos1.3.2不能啟動(Aug 4, 2020)啟動報(bào)錯(cuò):db.num is null
#訪問地址
http://192.168.235.2:8848/nacos/index.html
#user: nacos ;pwd:nacos (->czg*)

二、nacos集群配置
2.1 mysql中創(chuàng)建nacos的數(shù)據(jù)庫nacos_config
Nacos 推薦生產(chǎn)環(huán)境中數(shù)據(jù)庫使用建議至少主備模式,或者采用高可用數(shù)據(jù)庫。
這里為了簡化只采用了一個(gè)數(shù)據(jù)庫。首先新建一個(gè)名為 nacos_config 的數(shù)據(jù)庫
#naicat 或其他mysql客戶端運(yùn)行如下創(chuàng)建數(shù)據(jù)庫腳本
DROP DATABASE IF EXISTS nacos_config;
CREATE DATABASE IF NOT EXISTS nacos_config DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE nacos_config;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
2.2 初始化nacos數(shù)據(jù)
使用提供的 sql 語句源文件 導(dǎo)入初始數(shù)據(jù)。

初始化腳本中除了建表外,就是為nacos建立一個(gè)nacos用戶,并為其設(shè)置了管理員角色

2.3 集群配置
#停止nacos服務(wù)
./shutdown.sh
#查看ip地址,比如得到ip 172.27.189.199
ifconfig
2.3.1 配置cluster.conf(集群節(jié)點(diǎn))
在每個(gè) Nacos 節(jié)點(diǎn)的conf目錄下,添加配置文件 cluster.conf,可以參考相同目錄下的 cluster.conf.example 文件,每行配置一個(gè)節(jié)點(diǎn)的 IP 和端口,如 ip:port
cp ./nacos/conf/cluster.conf.example ./nacos/conf/cluster.conf
#編輯集群配置文件
vim ./nacos/conf/cluster.conf
比如
172.27.189.199:8848
172.27.189.199:8847
172.27.189.199:8846
2.3.2 配置conf/application.properties(mysql數(shù)據(jù)庫連接)
#編輯集群配置文件
vim ./nacos/conf/application.properties
其中server.port=8848是端口號
配置內(nèi)容方式參考:application.properties.example

# spring.datasource.platform=mysql
### Count of DB:
# db.num=1
### Connect URL of DB:
# db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
# db.user.0=nacos
# db.password.0=nacos
2.3.2copy nacos目錄為集群實(shí)例
cp -r nacos nacos8846
cp -r nacos nacos8847
并修改對應(yīng)的端口server.port=8848是端口號-->8846 、8847
分別啟動不同的集群實(shí)例,分別運(yùn)行在8846、8847、8848端口
./nacos/bin/startup.sh
./nacos8846/bin/startup.sh
./nacos8847/bin/startup.sh

查看啟動日志
cat ./nacos8846/logs/start.out
There is insufficient memory for the Java Runtime Environment to continue.
Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.

Caused by: io.grpc.netty.shaded.io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use

同一臺服務(wù)器, 啟動nacos集群,出現(xiàn)端口占用問題,具體問題如下 (版本號 : 2.0.0-ALPHA.2)
三、nacos服務(wù)注冊(Config)與發(fā)現(xiàn)(Discovery--阿里默認(rèn)集成ribbon)
阿里巴巴的 spring-cloud-alibaba-examples
阿里巴巴的 nacos-example
springboot接入nacos(轉(zhuǎn)載)--模塊化--推薦
服務(wù)注冊(privide)
先上效果圖

服務(wù)提供者 pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.czg</groupId>
<artifactId>nacos-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 沒用用al的配置不要亂添加的-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<!-- <version>0.2.1.RELEASE</version>-->
<!-- </dependency>-->
<!-- springCloud-nacos-服務(wù)發(fā)現(xiàn)功能依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- registerInstance報(bào)錯(cuò)failed to req API:/nacos/v1/ns/instance after all servers...-->
<version>0.2.2.RELEASE</version>
</dependency>
<!--修改賬號密碼,在數(shù)據(jù)庫中,找到users表,即用戶表,就可以修改密碼。nacos的密碼是使用 org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder 加密的。-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
服務(wù)provider的對外controlller需要添加@EnableDiscoveryClient

@RestController
@EnableDiscoveryClient
public class ProTest {
@GetMapping("/get")
public String echo() {
return "Hello Nacos Discovery ";
}
}
application.yml
server:
port: 8001
spring:
application:
name: shopping
cloud:
nacos:
discovery:
server-addr: 118.178.84.253:8848