目錄
一、SpringCloud。
(1)Nacos配置管理。
(1.1)nacos中添加配置文件、微服務(wù)引入依賴(lài),并配置bootstrap.yml文件。
(1.2)獲取配置文件信息,實(shí)現(xiàn)熱更新。
(1.3)多環(huán)境配置共享。
(1.4)多服務(wù)共享配置。
(2)http客戶(hù)端Feign。
(2.1)RestTemplate方式調(diào)用存在的問(wèn)題。
(2.2)導(dǎo)入feign依賴(lài),開(kāi)啟feign,編寫(xiě)feign客戶(hù)端。
(2.3)自定義配置——日志配置。
(2.4)性能優(yōu)化—連接池。
(2.5)Feign的最佳實(shí)踐—兩種方式。
(2.6)Feign的最佳實(shí)踐—抽取feign模塊。
(3)網(wǎng)關(guān)Gateway。
(3.1)網(wǎng)關(guān)的作用。
(3.2)搭建網(wǎng)關(guān)服務(wù)—導(dǎo)入依賴(lài),配置路由。
(3.3)路由斷言工廠(chǎng)。
(3.4)網(wǎng)關(guān)過(guò)濾器。
(3.5)全局過(guò)濾器(需要自己編寫(xiě))。
(3.6)過(guò)濾器執(zhí)行順序。
(3.7)跨域問(wèn)題處理。
(3.8)限流過(guò)濾器(僅供參考)。
二、搭建Nacos集群。?
(1)搭建集群的基本步驟:
(2)搭建數(shù)據(jù)庫(kù),初始化數(shù)據(jù)庫(kù)表結(jié)構(gòu)。
(2)下載nacos安裝包。
(3)?配置nacos。
(3.1)修改cluster.conf文件。
(3.2)?修改application.properties文件。
(3.3)復(fù)制三個(gè)nacos,并修改三個(gè)nacos的端口。
(4)啟動(dòng)nacos。
(5)nginx反向代理。
(6)訪(fǎng)問(wèn)nacos服務(wù)端。
一、SpringCloud。
(1)Nacos配置管理。
(1.1)nacos中添加配置文件、微服務(wù)引入依賴(lài),并配置bootstrap.yml文件。
注意:如果nacos中的文件寫(xiě)在public之外的命名空間,則在bootstrap文件要在config下寫(xiě)上namespace(命名空間),不然報(bào)錯(cuò)或讀取為null(因?yàn)槟J(rèn)是public命名空間)。?
提示:下面寫(xiě)的dev指的是開(kāi)發(fā)環(huán)境使用的配置,而不是dev命名空間。(該服務(wù)只能讀取它的命名空間下的多環(huán)境配置,不可跨越namespace讀取)
spring:
application:
name: userservice
profiles:
active: dev # 環(huán)境
cloud:
nacos:
# server-addr: localhost:8848 # nacos地址可以寫(xiě)在這里,也可以寫(xiě)在config那里
# namespace: 638a9517-13dd-4e8a-921a-59db18ab1368 # *****不能在這寫(xiě),會(huì)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)
config: # 推薦寫(xiě)到config下面
server-addr: localhost:8848
namespace: 638a9517-13dd-4e8a-921a-59db18ab1368 # 這里一定是這樣寫(xiě),不然一直報(bào)錯(cuò)(解析不了注入的屬性名等等問(wèn)題)
file-extension: yaml # 文件后綴名
(1.2)獲取配置文件信息,實(shí)現(xiàn)熱更新。
有兩種方式:
第一種方式:
@RefreshScope注解+@Value("${pattern.dateformat}")注解(獲取配置文件屬性值)
第二種方式:
@Data @Component @ConfigurationProperties(prefix = "pattern") public class PatternProperties { private String dateformat; }
(1.3)多環(huán)境配置共享。
注意:nacos中的多環(huán)境配置文件命名空間與服務(wù)的命名空間要一致。?
優(yōu)先級(jí):[服務(wù)名]-[環(huán)境].yaml >[服務(wù)名].yaml > 本地配置
(1.4)多服務(wù)共享配置。
提示:看最后四行就行,最后四行是多服務(wù)共享配置的兩種方式。?
spring:
application:
name: userservice
profiles:
active: dev # 環(huán)境
cloud:
nacos:
# server-addr: localhost:8848 # nacos地址可以寫(xiě)在這里,也可以寫(xiě)在config那里
# namespace: 638a9517-13dd-4e8a-921a-59db18ab1368 # *****不能在這寫(xiě),會(huì)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)報(bào)錯(cuò)
config: # 推薦寫(xiě)到config下面
server-addr: localhost:8848
# namespace: 638a9517-13dd-4e8a-921a-59db18ab1368 # 這里一定是這樣寫(xiě),不然一直報(bào)錯(cuò)(解析不了注入的屬性名等等問(wèn)題)
file-extension: yaml # 文件后綴名
extension-configs:
- dataId: orderservice.yaml
# shared-configs:
# - dataId: orderservice.yaml
?第一種方式:在config下添加。
shared-configs: - dataId: orderservice.yaml
第二種方式:在config下添加。
extension-configs: - dataId: orderservice.yaml
(2)http客戶(hù)端Feign。
(2.1)RestTemplate方式調(diào)用存在的問(wèn)題。
(2.2)導(dǎo)入feign依賴(lài),開(kāi)啟feign,編寫(xiě)feign客戶(hù)端。
1、導(dǎo)入依賴(lài)。?
<!--feign客戶(hù)端依賴(lài)包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、開(kāi)啟Feign。?
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
?3、編寫(xiě)Feign客戶(hù)端。
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
(2.3)自定義配置——日志配置。
第二種方式—局部配置(代碼配置):
@FeignClient(value = "userservice",configuration = DefaultFeignConfiguration.class)
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
(2.4)性能優(yōu)化—連接池。
<!--引入HttpClient依賴(lài)-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
<dependency>
feign: httpclient: enabled: true # 支持HttpClient的開(kāi)關(guān) max-connections: 200 # 最大連接數(shù) max-connections-per-route: 50 # 單個(gè)路徑的最大連接數(shù)
(2.5)Feign的最佳實(shí)踐—兩種方式。
(2.6)Feign的最佳實(shí)踐—抽取feign模塊。
feign-api模塊中:?
//@FeignClient(value = "userservice",configuration = DefaultFeignConfiguration.class)
@FeignClient(value = "userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
public class DefaultFeignConfiguration {
@Bean
public Logger.Level logLevel(){
return Logger.Level.BASIC;
}
}
@Data
public class User {
private Long id;
private String username;
private String address;
}
?在需要使用Feign的微服務(wù)pom中:?
<!--引入feign的統(tǒng)一api,這個(gè)模塊是自己寫(xiě)的-->
<dependency>
<groupId>cn.itcast.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
作用:引入這個(gè)依賴(lài)后,可以使用這個(gè)模塊的類(lèi)。?
(3)網(wǎng)關(guān)Gateway。
(3.1)網(wǎng)關(guān)的作用。
(3.2)搭建網(wǎng)關(guān)服務(wù)—導(dǎo)入依賴(lài),配置路由。
1、這里的網(wǎng)關(guān)也是一個(gè)微服務(wù)(新模塊),在pom中導(dǎo)入依賴(lài):
<dependencies>
<!--nacos服務(wù)注冊(cè)發(fā)現(xiàn)依賴(lài)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--網(wǎng)關(guān)gateway依賴(lài)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
2、在application.yaml配置文件中配置:
注意:請(qǐng)求進(jìn)入網(wǎng)關(guān)的時(shí)候:先predicates(斷言,如果滿(mǎn)足)—> uri(去nacos獲取服務(wù)地址)
server:
port: 10010
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:80
gateway:
routes:
- id: user-service #路由標(biāo)識(shí)
uri: lb://userservice #路由的目標(biāo)地址
predicates: #路由斷言,判斷請(qǐng)求是否符合規(guī)則
- Path=/user/** #路徑斷言,判斷路徑是否是以/user開(kāi)頭,如果是則符合規(guī)則(發(fā)到uri: lb://userservice中去)
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
(3.3)路由斷言工廠(chǎng)。
注意:斷言工廠(chǎng)根據(jù)需求,到spring官方網(wǎng)站查找,有具體語(yǔ)法。
提示:比如下面的,要滿(mǎn)足predicates中的Path與Before才能算是符合條件,然后路由到uri地址。?
- id: order-service uri: lb://orderservice predicates: - Path=/order/** - Before=2031-01-20T17:42:47.789-07:00[America/Denver]
(3.4)網(wǎng)關(guān)過(guò)濾器。
注意:過(guò)濾器工廠(chǎng)有37種,根據(jù)需求到spring官方網(wǎng)站查找使用,有具體使用語(yǔ)法。
server:
port: 10010
spring:
application:
name: gateway
cloud:
nacos:
server-addr: localhost:80
gateway:
routes:
- id: user-service #路由標(biāo)識(shí)
uri: lb://userservice #路由的目標(biāo)地址
predicates: #路由斷言,判斷請(qǐng)求是否符合規(guī)則
- Path=/user/** #路徑斷言,判斷路徑是否是以/user開(kāi)頭,如果是則符合規(guī)則(發(fā)到uri: lb://userservice中去)
# filters:
# - AddRequestHeader=Truth,Itcast is freaking aowsome!
- id: order-service
uri: lb://orderservice
predicates:
- Path=/order/**
- Before=2031-01-20T17:42:47.789-07:00[America/Denver]
default-filters:
- AddRequestHeader=Truth,Itcast is freaking aowsome!
(3.5)全局過(guò)濾器(需要自己編寫(xiě))。
//@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//1.獲取請(qǐng)求參數(shù)
ServerHttpRequest request = exchange.getRequest();
//2.獲取參數(shù)中的authorization參數(shù)
MultiValueMap<String, String> params = request.getQueryParams();
//3.判斷參數(shù)值是否等于 admin
String authorization = params.getFirst("authorization");
if ("admin".equals(authorization)){
//4.相等,放行
return chain.filter(exchange);
}
//5.不相等,攔截
//5.1設(shè)置狀態(tài)碼
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
//5.2攔截請(qǐng)求
return exchange.getResponse().setComplete();
}
@Override
public int getOrder() {
return -1;
}
}
(3.6)過(guò)濾器執(zhí)行順序。
注意:
1、網(wǎng)關(guān)斷言成功后過(guò)濾器才開(kāi)始合并成一個(gè)過(guò)濾器鏈。
2、路由過(guò)濾器與DefaultFilter都是各自從1開(kāi)始計(jì)數(shù)(因?yàn)檫@兩種都可以有很多個(gè))。
3、全局過(guò)濾器自己定義大?。J(rèn)的order值非常大)
(3.7)跨域問(wèn)題處理。
跨域:就是在一個(gè)網(wǎng)頁(yè)中,請(qǐng)求跟它的IP地址或端口不一樣的資源。
如果HTML文件所在的源為A,而請(qǐng)求數(shù)據(jù)的目標(biāo)源為B,由B服務(wù)器返回的響應(yīng)數(shù)據(jù)如果包含Access-Control-Allow-Origin頭,其中值為A,那么瀏覽器就認(rèn)為這是一次合法的跨域請(qǐng)求,會(huì)允許響應(yīng)數(shù)據(jù)返回給A客戶(hù)端。但如果沒(méi)有這個(gè)頭或者值不是A,則會(huì)被瀏覽器攔截,導(dǎo)致跨域問(wèn)題。
spring:
cloud:
gateway:
globalcors: # 全局的跨域處理
add-to-simple-url-handler-mapping: true # 解決options請(qǐng)求被攔截問(wèn)題
corsConfigurations:
'[/**]':
allowedOrigins: # 允許哪些網(wǎng)站的跨域請(qǐng)求
- "http://localhost:8090"
- "http://www.leyou.com"
allowedMethods: # 允許的跨域ajax的請(qǐng)求方式
- "GET"
- "POST"
- "DELETE"
- "PUT"
- "OPTIONS"
allowedHeaders: "*" # 允許在請(qǐng)求中攜帶的頭信息
allowCredentials: true # 是否允許攜帶cookie
maxAge: 360000 # 這次跨域檢測(cè)的有效期
(3.8)限流過(guò)濾器(僅供參考)。
二、搭建Nacos集群。?
(1)搭建集群的基本步驟:
- 搭建數(shù)據(jù)庫(kù),初始化數(shù)據(jù)庫(kù)表結(jié)構(gòu)
- 下載nacos安裝包
- 配置nacos
- 啟動(dòng)nacos集群
- nginx反向代理
(2)搭建數(shù)據(jù)庫(kù),初始化數(shù)據(jù)庫(kù)表結(jié)構(gòu)。
作用:Nacos 集群可以選擇使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)服務(wù)和配置信息,其主要目的是提高數(shù)據(jù)的可靠性和持久化能力。
為什么使用數(shù)據(jù)庫(kù):
Nacos默認(rèn)數(shù)據(jù)存儲(chǔ)在內(nèi)嵌數(shù)據(jù)庫(kù)Derby中,不屬于生產(chǎn)可用的數(shù)據(jù)庫(kù)。(Nacos中默認(rèn)使用的嵌入式數(shù)據(jù)庫(kù) Derby,雖然它可以滿(mǎn)足基本使用需求,但在生產(chǎn)環(huán)境中不建議使用,因?yàn)樗⒉痪邆涓呖捎眯院涂煽啃缘确矫娴膬?yōu)勢(shì),不能保證在重要數(shù)據(jù)丟失時(shí)能夠快速恢復(fù)。)
首先新建一個(gè)數(shù)據(jù)庫(kù),命名為nacos,而后導(dǎo)入下面的SQL:
CREATE TABLE `config_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) DEFAULT NULL,
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時(shí)間',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶(hù)字段',
`c_desc` varchar(256) DEFAULT NULL,
`c_use` varchar(64) DEFAULT NULL,
`effect` varchar(64) DEFAULT NULL,
`type` varchar(64) DEFAULT NULL,
`c_schema` text,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = config_info_aggr */
/******************************************/
CREATE TABLE `config_info_aggr` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(255) NOT NULL COMMENT 'group_id',
`datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
`content` longtext NOT NULL COMMENT '內(nèi)容',
`gmt_modified` datetime NOT NULL COMMENT '修改時(shí)間',
`app_name` varchar(128) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶(hù)字段',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租戶(hù)字段';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = config_info_beta */
/******************************************/
CREATE TABLE `config_info_beta` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時(shí)間',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶(hù)字段',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = config_info_tag */
/******************************************/
CREATE TABLE `config_info_tag` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL COMMENT 'content',
`md5` varchar(32) DEFAULT NULL COMMENT 'md5',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時(shí)間',
`src_user` text COMMENT 'source user',
`src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = config_tags_relation */
/******************************************/
CREATE TABLE `config_tags_relation` (
`id` bigint(20) NOT NULL COMMENT 'id',
`tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
`tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
`data_id` varchar(255) NOT NULL COMMENT 'data_id',
`group_id` varchar(128) NOT NULL COMMENT 'group_id',
`tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
`nid` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`nid`),
UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = group_capacity */
/******************************************/
CREATE TABLE `group_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整個(gè)集群',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認(rèn)值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個(gè)配置大小上限,單位為字節(jié),0表示使用默認(rèn)值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個(gè)數(shù),,0表示使用默認(rèn)值',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個(gè)聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),0表示使用默認(rèn)值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數(shù)量',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時(shí)間',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = his_config_info */
/******************************************/
CREATE TABLE `his_config_info` (
`id` bigint(64) unsigned NOT NULL,
`nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`data_id` varchar(255) NOT NULL,
`group_id` varchar(128) NOT NULL,
`app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
`content` longtext NOT NULL,
`md5` varchar(32) DEFAULT NULL,
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`src_user` text,
`src_ip` varchar(50) DEFAULT NULL,
`op_type` char(10) DEFAULT NULL,
`tenant_id` varchar(128) DEFAULT '' COMMENT '租戶(hù)字段',
PRIMARY KEY (`nid`),
KEY `idx_gmt_create` (`gmt_create`),
KEY `idx_gmt_modified` (`gmt_modified`),
KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租戶(hù)改造';
/******************************************/
/* 數(shù)據(jù)庫(kù)全名 = nacos_config */
/* 表名稱(chēng) = tenant_capacity */
/******************************************/
CREATE TABLE `tenant_capacity` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵ID',
`tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
`quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配額,0表示使用默認(rèn)值',
`usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
`max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個(gè)配置大小上限,單位為字節(jié),0表示使用默認(rèn)值',
`max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大個(gè)數(shù)',
`max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '單個(gè)聚合數(shù)據(jù)的子配置大小上限,單位為字節(jié),0表示使用默認(rèn)值',
`max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大變更歷史數(shù)量',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改時(shí)間',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租戶(hù)容量信息表';
CREATE TABLE `tenant_info` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`kp` varchar(128) NOT NULL COMMENT 'kp',
`tenant_id` varchar(128) default '' COMMENT 'tenant_id',
`tenant_name` varchar(128) default '' COMMENT 'tenant_name',
`tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
`create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
`gmt_create` bigint(20) NOT NULL COMMENT '創(chuàng)建時(shí)間',
`gmt_modified` bigint(20) NOT NULL COMMENT '修改時(shí)間',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
CREATE TABLE `users` (
`username` varchar(50) NOT NULL PRIMARY KEY,
`password` varchar(500) NOT NULL,
`enabled` boolean NOT NULL
);
CREATE TABLE `roles` (
`username` varchar(50) NOT NULL,
`role` varchar(50) NOT NULL,
UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
`role` varchar(50) NOT NULL,
`resource` varchar(255) NOT NULL,
`action` varchar(8) NOT NULL,
UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
(2)下載nacos安裝包。
nacos在GitHub上有下載地址:https://github.com/alibaba/nacos/tags,可以選擇任意版本下載。
(3)?配置nacos。
(3.1)修改cluster.conf文件。
nacos/conf/cluster.conf.example 文件是一個(gè)示例集群配置文件,它包含了在 Nacos 集群中至少需要三個(gè)節(jié)點(diǎn)的 IP 地址和端口等信息。具體來(lái)說(shuō),cluster.conf.example 文件中每行的格式為:
nodeIp:port
其中 nodeIp 為節(jié)點(diǎn)的 IP 地址,port 為節(jié)點(diǎn)監(jiān)聽(tīng)的端口號(hào)。
cluster.conf.example 文件的作用是提供一份集群配置的范例,方便用戶(hù)進(jìn)行參考和修改。當(dāng)需要將 Nacos 部署成集群模式時(shí),用戶(hù)可以通過(guò)修改該文件來(lái)配置集群中各節(jié)點(diǎn)的地址和端口號(hào)。此外,用戶(hù)還可以根據(jù)實(shí)際需求增加或刪除集群節(jié)點(diǎn)的信息。
需要注意的是,cluster.conf.example 文件需要重命名為 cluster.conf 才能生效。重命名后,Nacos 會(huì)自動(dòng)讀取該文件的配置信息并將節(jié)點(diǎn)加入到集群中。
1、進(jìn)入nacos的conf目錄,修改配置文件cluster.conf.example,重命名為cluster.conf。
然后添加內(nèi)容(在cluster.conf下面添加上,把原本的地址刪掉):按照nacos結(jié)點(diǎn)的地址添加。
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847
作用解析:?
通過(guò)在 Nacos 的 conf
目錄下創(chuàng)建 cluster.conf
文件,并在其中添加節(jié)點(diǎn)的 IP 地址和端口信息,可以使不同的 Nacos 節(jié)點(diǎn)之間進(jìn)行數(shù)據(jù)同步和協(xié)調(diào),從而實(shí)現(xiàn)高可用性和負(fù)載均衡。
具體來(lái)講,在 Nacos 集群中,每個(gè)節(jié)點(diǎn)都會(huì)讀取 cluster.conf
文件,并嘗試連接其中列出的其它節(jié)點(diǎn)。如果節(jié)點(diǎn)之間能夠成功建立連接,它們就會(huì)使用 Raft 協(xié)議進(jìn)行數(shù)據(jù)同步和狀態(tài)機(jī)復(fù)制,并按照一定的算法選舉 leader 節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)的高可用性和一致性。
例如,當(dāng)一個(gè)客戶(hù)端向 Nacos 集群中的某個(gè)節(jié)點(diǎn)發(fā)起注冊(cè)服務(wù)的請(qǐng)求時(shí),該節(jié)點(diǎn)會(huì)將請(qǐng)求轉(zhuǎn)發(fā)給 leader 節(jié)點(diǎn)處理,并等待 leader 節(jié)點(diǎn)返回響應(yīng)。如果 leader 節(jié)點(diǎn)出現(xiàn)故障,集群中的其它節(jié)點(diǎn)會(huì)重新進(jìn)行 leader 選舉,以選出新的 leader 節(jié)點(diǎn),并確保服務(wù)的繼續(xù)注冊(cè)和發(fā)現(xiàn)。
因此,通過(guò)在 cluster.conf
中配置節(jié)點(diǎn)信息,我們可以實(shí)現(xiàn)多節(jié)點(diǎn)之間的數(shù)據(jù)同步和狀態(tài)機(jī)復(fù)制,從而提供高可用性和負(fù)載均衡的服務(wù)。這也是在分布式系統(tǒng)中常見(jiàn)的一種數(shù)據(jù)復(fù)制和高可用性實(shí)現(xiàn)方式。
(3.2)?修改application.properties文件。
添加數(shù)據(jù)庫(kù)配置:
注意:這里面的配置都有,只需刪除注釋標(biāo)識(shí)符就行,然后根據(jù)實(shí)際情況修改。?
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&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123
(3.3)復(fù)制三個(gè)nacos,并修改三個(gè)nacos的端口。
注意:是把完成了上面(3.1)(3.2)操作的nacos復(fù)制三個(gè)。
將nacos文件夾復(fù)制三份,分別命名為:nacos1、nacos2、nacos3。
然后分別修改三個(gè)文件夾中的application.properties:
nacos1:
server.port=8845
nacos2:
server.port=8846
nacos3:
server.port=8847
(4)啟動(dòng)nacos。
然后分別啟動(dòng)三個(gè)nacos節(jié)點(diǎn):
startup.cmd
注意: nacos集群?jiǎn)?dòng)和單體啟動(dòng)是不一樣的,單體nacos啟動(dòng)需要添加參數(shù)。
(5)nginx反向代理。
1、下載nginx,解壓到任意非中文目錄下。
2、修改conf/nginx.conf文件,配置如下:
注意:復(fù)制到http語(yǔ)句塊的任意位置都可以,但一定要在http語(yǔ)句塊內(nèi)。
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
3、進(jìn)入cmd,啟動(dòng)nginx.exe程序。
start nginx.exe?
(6)訪(fǎng)問(wèn)nacos服務(wù)端。
在瀏覽器訪(fǎng)問(wèn):http://localhost/nacos即可。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-499751.html
在微服務(wù)的application.yml文件中的配置如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-499751.html
spring:
cloud:
nacos:
server-addr: localhost:80 # Nacos地址
到了這里,關(guān)于39.SpringCloud—配置管理nacos、遠(yuǎn)程調(diào)用Feign、服務(wù)網(wǎng)關(guān)Gateway的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!