https://github.com/nacos-group/nacos-docker/tree/master/example
<!--SpringBoot版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.10.RELEASE</version
</parent>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
spring:
application:
name: hailtaxi-driver
profiles:
active: dev
cloud:
#======================================================================== nacos設定 ========================#
nacos:
discovery:
server-addr: 59.110.6.119:8848 # nacos支援設定中心與註冊中心隔離
namespace: 2a32361d-df48-40a9-946e-b83393363fa9
group: template
weight: 1 # 不同範例間的權重
config:
server-addr: 59.110.6.119:8848
namespace: 2a32361d-df48-40a9-946e-b83393363fa9
group: template
file-extension: yaml # 組態檔擴充套件名 預設會載入 ${spring.application.name}-${spring.profiles.active}.${file-extension}
shared-configs: # 共用設定
- dataId: datasource.yaml
refresh: true # 是否支援動態重新整理
group: template
extension-configs: # 擴充套件設定
- dataId: customer.yaml
refresh: true # 是否支援動態重新整理
group: template
Environment自動重新整理
更改在啟動類,定時重新整理設定資訊
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = "xx.template.driver.mapper")
class DemoApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
while (true) {
//監聽指定設定
//當動態設定重新整理時,會更新到 Environment 中,
String name = applicationContext.getEnvironment().getProperty("app.name");
String version = applicationContext.getEnvironment().getProperty("app.version");
System.out.println("app.name=" + name + ";app.version=" + version);
try {
// 每隔5秒中從 Environment 中獲取一下
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@Value重新整理
程式中如果寫了 @Value 註解,可以採用在指定類上新增 @RefreshScope 實現重新整理,只需要在指定類上新增該註解即可
@RefreshScope
@RequestMapping(value = "/demo")
class DemoController {
@Value("${app.version}")
private String version;
@Value("${app.name}")
private String appName;
@GetMapping("/appInfo")
public String getAppInfo() {
return appName + ":" + version;
}
}
Nacos叢集模式包括 直連模式、VIP模式、域名模式,其中直連模式因為節點故障無法自動識別、效率低下不做介紹,官方也不推薦這種模式。
VIP模式
http://VIP:port/openAPI 掛載VIP模式,直連vip即可,下面掛server真實ip,可讀性不好。
域名模式
http://nacos.com:port/openAPI 域名 + VIP模式,可讀性好,而且換ip方便,因此官方推薦該模式
服務下載
通過https://github.com/alibaba/nacos/releases/下載需要的服務,並上傳到伺服器解壓縮。
設定資料庫
修改 conf/application.properties 設定資料庫
修改spring.datasource.platform為對應的資料庫型別;Connect URL of DB為對應的資料庫連線資訊。
多節點應使用相同資料庫。
叢集設定
修改 conf/cluster.conf 設定叢集
將所有節點的ip、埠資訊設定到cluster.conf 保證所有節點互通。
啟動節點
進入到每個節點 nacos/bin 目錄下,執行sh startup.sh
完成後,存取任何一個單節點,可以在節點列表中檢視叢集狀態,專案使用時,進行如下設定即可
使用者端接入,不建議寫多個節點的IP:Port,建議以域名的方式連線Nacos,因此需要設定Nacos域名。
#負載均衡池設定
upstream nacos-cluster{
server 192.168.211.145:8848; # 修改為conf/cluster.conf中設定的叢集資訊
server 192.168.211.146:8848;
server 192.168.211.147:8848;
}
server {
listen 80;
server_name nacos.cluster.com;
location / {
proxy_pass http://nacos-cluster;
}
}
完成代理設定後,專案使用時只需要修改 server-addr為192.168.211.145(nginx所在伺服器ip):80 即可