基礎篇
一、什么是Nacos?
官方介紹是這樣的:
Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平台。 Nacos 是構建以“服務”為中心的現代應用架構(例如微服務范式、雲原生范式)的服務基礎設施。
官方網址:http://nacos.io
二、怎么搭建一個Nacos服務?
(1)先下載一個Nacos服務中間件,然后解壓
最新版可以去官網下載:https://github.com/alibaba/nacos/releases
我自己的百度雲鏈接:https://pan.baidu.com/s/1FlARem35W8NIDlIFkLga1Q 提取碼:nrfc
(2)解壓之后再bin目錄下點擊startup.cmd運行(如果使用的是Linux系統則點擊startup.sh)
啟動后界面如下:
輸入網址:http://localhost:8848/nacos/#/login 登錄名和密碼都是:nacos
登錄后界面如下:
其中【配置列表】可作為配置中心,【服務列表】可作為注冊中心
三、什么是配置中心?什么是服務注冊中心?
(1)什么是配置中心?
使用過SpringBoot項目的開發者都知道,SpringBoot有一個application.yml或者application.properties作為配置文件,里面有着各種各樣的配置,比如數據庫的url、username等。但是這個配置文件在文件打包之后就無法修改了,所以這時就需要一個配置中心來管理這些文件以達到配置動態更新的效果。
從微服務的角度來說,微服務意味着要將單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,因此系統中會出現大量的服務。由於每個服務都需要必要的配置信息才能運行,所以一套集中式的,動態的配置管理設施是必不可少的。
(2)什么是注冊中心?
注冊中心主要包括服務注冊和服務發現,可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關系。在分布式架構中,服務會注冊到這里,當服務需要調用其它服務時,就到這里找到服務的地址,進行調用。
提高篇:使用Nacos作為注冊中心與配置中心
一、新建一個SpringBoot項目:nacos_server
項目結構圖如下:
二、在pom.xml文件中添加如下內容:
<dependencies> <!--web組件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--actuator--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--SpringCloud-Nacos相關--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-actuator</artifactId> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-spring-context</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!--MySQL--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
其中SpringCloud的版本為:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR2</version> <type>pom</type> <scope>import</scope> </dependency>
三、在resources目錄下新建application.yml與bootstarp.yml配置文件
bootstarp.yml與application.yml的區別:
1、加載順序
- bootstrap.yml(bootstrap.properties)先加載
- application.yml(application.properties)后加載
2、配置區別
- bootstrap.yml 可以理解成系統級別的一些參數配置,這些參數一般是不會變動的。
- application.yml 可以用來定義應用級別的,如果搭配 spring-cloud-config 使用 application.yml 里面定義的文件可以實現動態替換。
bootstarp.yml內容如下:
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服務注冊地址
# ip: 127.0.0.1
application:
name: nacos_server
application.yml內容如下:
server:
port: 9668
nacos:
config:
server-addr: 127.0.0.1:8848
group: NAOCS-SPRING-CLOUD-SERVICE
file-extension: properties
data-id: mysql-config.properties
management:
endpoints:
web:
exposure:
include: '*'
四、在NacosServerApplication.java 啟動類中加上@EnableDiscoveryClient注解
五、在文件夾config下新建兩個類:DatabaseConfig與MybatisConfiguration
DatabaseConfig代碼如下:
package com.wzhi.config; import com.alibaba.nacos.api.config.annotation.NacosValue; import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; import lombok.Data; import org.springframework.stereotype.Component; /** * 從nacos配置中心中獲取數據庫連接配置 * * @author wzhi */ @Component @Data @NacosPropertySource(dataId = "${nacos.config.data-id}", groupId = "${nacos.config.group}", autoRefreshed = true) public class DatabaseConfig { @NacosValue(value = "${driver_class_name}", autoRefreshed = true) private String driverClassName; @NacosValue(value = "${url}", autoRefreshed = true) private String url; @NacosValue(value = "${user_name}", autoRefreshed = true) private String username; @NacosValue(value = "${password}", autoRefreshed = true) private String password; }
MybatisConfiguration代碼如下:
package com.wzhi.config; import com.zaxxer.hikari.HikariDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import javax.sql.DataSource; /** * 配置Mybatis和連接池 * @author wzhi */ @Configuration @MapperScan(basePackages={"com.wzhi.dao"}) public class MybatisConfiguration { @Autowired private DatabaseConfig dataBaseConfig; @Bean public DataSource dataSource() { HikariDataSource dataSource = new HikariDataSource(); System.out.println("獲取到的配置文件內容為:"+dataBaseConfig); dataSource.setDriverClassName(dataBaseConfig.getDriverClassName()); dataSource.setJdbcUrl(dataBaseConfig.getUrl()); dataSource.setUsername(dataBaseConfig.getUsername()); dataSource.setPassword(dataBaseConfig.getPassword()); return dataSource; } @Bean public SqlSessionFactory sqlSessionFactoryBean() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); // sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mybatis/mapper/*.xml")); return sqlSessionFactoryBean.getObject(); } }
運行之后,有如下打印內容,說明配置中心搭建成功:
同時Nacos管理界面如下,則說明服務已經注冊