之前在公司用過SpringCloud Netflix,但是由於這個Eureka很久都沒更新維護了,再加上網上Nacos評價很好,於是想用Nacos做注冊中心搭一個SpringCloudDemo,話不多說,現在開始吧~
一、Nocas
Nocas和Eureka不一樣,Eureka需要在Cloud目錄下新建一個EurekaServer,然后啟動Application。Nocas就簡單很多了,下載一個實例啟動就好了。
1. 可以從GitHub上拉取源碼啟動:
git clone https://github.com/alibaba/nacos.git cd nacos/ mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U ls -al distribution/target/ // change the $version to your actual path cd distribution/target/nacos-server-$version/nacos/bin
需要注意的是,Nacos官方已經給出了運行環境要求,所以最好是環境滿足要求,不然可能會出些奇奇怪怪的問題~
Nacos 依賴 Java 環境來運行。如果您是從代碼開始構建並運行Nacos,還需要為此配置 Maven環境,請確保是在以下版本環境中安裝使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac。 64 bit JDK 1.8+;下載 & 配置。 Maven 3.2.x+;下載 & 配置。
2. 也可以下載免安裝包啟動,下載地址:https://github.com/alibaba/nacos/tags
在我們下載完成后,解壓,雙擊bin目錄下的startup.cmd,等一會兒就啟動好了。
然后我們打開瀏覽器,在網址欄輸入http://localhost:8848/nacos,輸入默認的賬號密碼,nacos/nacos,就進入到了注冊中心后台管理界面。
關於Nacos更多的東西,就不說啦,本博客只講如何在SpringCloud里使用Nacos進行注冊。
二、SpringCloudDemo
先給出博主的Demo目錄結構,Auth認證和GateWay網關暫還未做任何配置,只是在usercenter里做了一個測試。
那么是如何創建出這個目錄結構的呢?首先創建一個maven工程。
再然后右鍵這個工程,選擇Module即可。
在父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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>cloud</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>gateway</module> <module>auth</module> <module>usercenter</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-boot.version>2.2.8.RELEASE</spring-boot.version> <spring-cloud.version>2.2.2.RELEASE</spring-cloud.version> <spring-nacos.version>2.2.1.RELEASE</spring-nacos.version> <apache-httpcomponents.version>4.5.11</apache-httpcomponents.version> <jackson.version>2.10.0</jackson.version> </properties> </project>
usercenter的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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud</artifactId> <groupId>org.example</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>usercenter</artifactId> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring-boot.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${spring-boot.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>${spring-nacos.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-commons --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-commons</artifactId> <version>${spring-cloud.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${apache-httpcomponents.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> </dependencies> </project>
然后在usercenter里創建Application。注意,這里加了@SpringBootApplication和@EnableDiscoveryClient,不要偷懶換成@SpringCloudApplication!!!雖然@SpringCloudApplication注解里包含@SpringBootApplication和@EnableDiscoveryClient,不過它也包含@EnableCircuitBreaker注解。@EnableCircuitBreaker是斷路器的,如果你引用@SpringCloudApplication注解,那么maven需要引入hystrix的JAR包和配置包,很麻煩!!!
package zh; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class UserCenterApplication { public static void main(String[] args){ SpringApplication.run(UserCenterApplication.class,args); } }
在resources/application.yml里添加配置信息:
server: port: 3005 # 服務端口 spring: application: name: usercenter #服務名稱 cloud: nacos: config: server-addr: 127.0.0.1:8848 #注冊到Nacos
然后寫一個測試用例:
package zh.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RequestMapping("login") @RestController public class LoginApi { @RequestMapping("/test") public String test(){ System.out.println("test ok"); return "test ok"; } }
啟動UserCenterApplication!
在網址欄輸入http://localhost:3005/login/test,即可看到返回值 test ok 字樣,同時Nacos服務列表也出現了該模塊。
Ok,到此為止,就已經成功的把模塊注冊到了Nacaos上,大功告成!