nacos學習筆記

1、nacos簡介

nacos 既可以做註冊中心又可以做配置中心

2、nacos服務端下載與啓動

nacos官網
nacos下載地址

nacos服務器啓動 (windows環境)
1、下載nacos發行包,直接運行startup.cmd。
2、下載源碼,通過下面命令運行
打包:mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
進入下面目錄:distribution/target/nacos-server-$version/nacos/bin
運行startup.cmd。

nacos默認訪問地址:http://localhost:8848/nacos
建議不用127.0.0.1訪問(有bug),用本地ip或者localhost訪問。

配置中心

添加如下配置
common.properties

server.host=localhost

nacos-member.properties

member.username=zhangsan

nacos-order.properties

order.no=20001

3、nacos客戶端

3.1、提供者-會員中心(springcloud-2.0-nacos-member)

pom.xml

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
	</parent>
	<!-- 管理依賴 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- SpringBoot整合Web組件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- SpringCloud nacos 註冊中心 -->
		<dependency>
		    <groupId>com.alibaba.cloud</groupId>
		    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		    <version>2.0.1.RELEASE</version>
		</dependency>
		<!-- SpringCloud nacos 配置中心 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
			<version>2.0.1.RELEASE</version>
		</dependency>
	</dependencies>
	<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

bootstrap.yml

###訂單服務的端口號
server:
  port: 8000
###服務別名----服務註冊到註冊中心名稱
spring:
  application:
    name: nacos-member
  ####consul註冊中心地址
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        ### 配置文件後綴
        # file-extension: yml
        ### 組名
        # group: dev-group
        shared-dataids: common.properties

控制器

package com.mine.api.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class NacosMemberController {
	@Value("${server.host}")
	private String host;

	@Value("${server.port}")
	private String port;

	@Value("${member.username}")
	private String username;

	@RequestMapping("/getMember")
	public String getMember() {
		return "i am " + username + " from " + host + ":" + port;
	}
}

啓動類

package com.mine.api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosAppMember {

	public static void main(String[] args) {
		SpringApplication.run(NacosAppMember.class, args);
	}

}

3.2、消費者-訂單中心(springcloud-2.0-nacos-order)

pom.xml

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
	</parent>
	<!-- 管理依賴 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- SpringBoot整合Web組件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- SpringCloud nacos 註冊中心 -->
		<dependency>
		    <groupId>com.alibaba.cloud</groupId>
		    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
		    <version>2.0.1.RELEASE</version>
		</dependency>
		<!-- SpringCloud nacos 配置中心 -->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
			<version>2.0.1.RELEASE</version>
		</dependency>
	</dependencies>
	<!-- 注意: 這裏必須要添加, 否者各種依賴有問題 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

bootstrap.yml

###訂單服務的端口號
server:
  port: 8001
###服務別名----服務註冊到註冊中心名稱
spring:
  application:
    name: nacos-order
  ####consul註冊中心地址
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        ### 配置文件後綴
        # file-extension: yml
        ### 組名
        # group: dev-group
        shared-dataids: common.properties

控制器

package com.mine.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class NacosOrderController {
	@Autowired
	private RestTemplate restTemplate;

	@Value("${server.host}")
	private String host;

	@Value("${server.port}")
	private String port;

	@Value("${order.no}")
	private String orderNo;

	@RequestMapping("/getOrder")
	public String getOrder() {
		String url = "http://nacos-member/getMember";
		String object = restTemplate.getForObject(url, String.class);
		return "orderNo is " + orderNo + " from " + host + ":" + port + ", " + object;
	}
}

啓動類

package com.mine.api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosAppOrder {

	public static void main(String[] args) {
		SpringApplication.run(NacosAppOrder.class, args);
	}

	@Bean
	@LoadBalanced
	public RestTemplate getRestTemplate() {
		return new RestTemplate();
	}
}

nacos做配置中心

支持自定義擴展的 Data Id 配置

Spring Cloud Alibaba Nacos Config 從 0.2.1 版本後,可支持自定義 Data Id 的配置。

# config external configuration
# 1、Data Id 在默認的組 DEFAULT_GROUP,不支持配置的動態刷新
spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties

# 2、Data Id 不在默認的組,不支持動態刷新
spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP

# 3、Data Id 既不在默認的組,也支持動態刷新
spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUP
spring.cloud.nacos.config.ext-config[2].refresh=true

配置共享的 Data Id

spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.properties
spring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties

配置優先級

Spring Cloud Alibaba Nacos Config 目前提供了三種配置能力從 Nacos 拉取相關的配置。

A: 通過 spring.cloud.nacos.config.shared-dataids 支持多個共享 Data Id 的配置

B: 通過 spring.cloud.nacos.config.ext-config[n].data-id 的方式支持多個擴展 Data Id 的配置

C: 通過內部相關規則(應用名、應用名+ Profile )自動生成相關的 Data Id 配置

當三種方式共同使用時,他們的一個優先級關係是:A < B < C
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章