springboot + springcloud +nacos實戰


首先從整個軟件的功能和應用場景來說,nacos更像consul,而非eureka,nacos設計的時候自帶的配置中心功能,讓我們省下了去搞springcloud config的時間,但這里並不是說nacos或者consul比eureka優秀,只是因為eureka在分布式環境下更加注重的是可用性,而犧牲了他的最終一致性,在不同的領域上,nacos和eureka都有他們自己的建樹,關鍵還是看具體的架構需求。廢話不多說直接進入nacos的初探尋。

1.nacos服務端應用,啟動

1.1 下載安裝

nacos服務端對比euerka來說相對比較麻煩一點,需要我們自己去下載安裝,而非引入跑程序
下載地址
https://github.com/alibaba/nacos/releases

1.2 解壓,啟動

選擇完之后解壓
linux下就是tar -zxvf nacos-server-1.0.0.tar.gz
windows就直接用軟件解壓即可

進入如軟件bin目錄下
linux 啟動命令 sh startup.sh -m standalone

windows 直接雙擊即可

啟動成功的話效果會是

 

瀏覽器請求http://localhost:8848/nacos/index.html 可查看情況

新版本的nacos自帶着用戶登錄驗證,默認賬號和密碼都都輸入nacos即可

 
 

1.3 springcloud微服務以nacos為注冊中心啟動

1.3.1 父級項目配置

因為springcloud是一個集成了很多框架組件的一個項目,所以項目也為了方便把一些公用的依賴到父級的pom文件下其中的關鍵主要是

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> 

    <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.9.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

上圖兩個依賴分別是springboot的版本依賴,和springcloud alibaba的依賴,下面貼出來的就是詳細的父級pom文件,下面打包的配置可以不用管,只需要看dependency的依賴即可

<?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>com.gitee.simons.cloud</groupId> <artifactId>simons-cloud</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>simons-cloud</name> <description>simons parent</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.3.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>0.9.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Greenwich.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <properties> <spring-boot.version>2.1.3.RELEASE</spring-boot.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <app.version>0.0.1-SNAPSHOT</app.version> <java.version>1.8</java.version> <mediaroom.admin.version>2.0.4</mediaroom.admin.version> <jjwt.version>0.9.0</jjwt.version> <druid.version>1.0.14</druid.version> <crypto.version>0.5.7</crypto.version> <swagger2.version>2.8.0</swagger2.version> <mediaroom.util.version>2.6.6-SNAPSHOT</mediaroom.util.version> <mediaroom.middlemq.utils.version>2.0.0-SNAPSHOT</mediaroom.middlemq.utils.version> <mediaroom.j2ee.version>0.1.0-SNAPSHOT</mediaroom.j2ee.version> <curator.version>2.10.0</curator.version> <quartz.version>2.3.0</quartz.version> <fastjson.version>1.1.28</fastjson.version> <p3c-pmd.version>1.3.1</p3c-pmd.version> <maven-pmd-plugin.version>3.8</maven-pmd-plugin.version> <!--jsw daemon --> <daemon-name>service</daemon-name> <daemon-JAVA_Xms>1024M</daemon-JAVA_Xms> <daemon-JAVA_Xmx>1024M</daemon-JAVA_Xmx> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency> <!-- spring aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>${mediaroom.admin.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <!-- 工具 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.2.4</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <build> <plugins> <!-- PMD插件 --> <!-- Alibaba p3c checkstyle --> <plugin> <!-- mvn -Dpmd.language=en pmd:check mvn -Dpmd.language=en pmd:pmd --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>${maven-pmd-plugin.version}</version> <configuration> <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding> <targetJdk>${java.version}</targetJdk> <!-- minimumTokens>100</minimumTokens --> <rulesets> <ruleset>rulesets/java/ali-comment.xml</ruleset> <ruleset>rulesets/java/ali-concurrent.xml</ruleset> <ruleset>rulesets/java/ali-constant.xml</ruleset> <ruleset>rulesets/java/ali-exception.xml</ruleset> <ruleset>rulesets/java/ali-flowcontrol.xml</ruleset> <ruleset>rulesets/java/ali-naming.xml</ruleset> <ruleset>rulesets/java/ali-oop.xml</ruleset> <ruleset>rulesets/java/ali-orm.xml</ruleset> <ruleset>rulesets/java/ali-other.xml</ruleset> <ruleset>rulesets/java/ali-set.xml</ruleset> <ruleset>rulesets/vm/ali-other.xml</ruleset> </rulesets> <printFailingErrors>true</printFailingErrors> <!-- 1: blocker ; 2: critical ; 3: major --> <minimumPriority>2</minimumPriority> </configuration> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> <dependencies> <dependency> <groupId>com.alibaba.p3c</groupId> <artifactId>p3c-pmd</artifactId> <version>${p3c-pmd.version}</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-source-plugin</artifactId> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>maven-ali</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> </repository> <!--<repository>--> <!--<id>pentaho-public</id>--> <!--<name>Pentaho Public</name>--> <!--<url>http://nexus.pentaho.org/content/groups/omni/</url>--> <!--<releases>--> <!--<enabled>true</enabled>--> <!--<updatePolicy>daily</updatePolicy>--> <!--</releases>--> <!--<snapshots>--> <!--<enabled>true</enabled>--> <!--<updatePolicy>interval:15</updatePolicy>--> <!--</snapshots>--> <!--</repository>--> </repositories> <modules> <module>simons-nacos</module> <module>simons-gateway</module> <module>simons-base</module> </modules> </project>

父級項目創建完成之后,開始創建第一個springcloud alibaba的項目加入到nacos中,那么在下面父親目錄下創建一個springboot目錄,名字叫simons-nacos,

 
image.png

具體的文件pom文件

<?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> <groupId>com.gitee.simons.cloud</groupId> <artifactId>simons-cloud</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>simons-nacos</artifactId> <name>${project.artifactId} [web]</name> <packaging>jar</packaging> <!-- 版本,字段關鍵字 --> <properties> <start-class>com.gitee.simons.nacos.NacosApplication</start-class> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> <profiles> <profile> <id>spring-boot</id> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot.version}</version> <configuration> <mainClass>${start-class}</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> <build> <finalName>${project.artifactId}</finalName> <plugins> <!--解決持續集成無法找到main類 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>${start-class}</mainClass> </configuration> </plugin> </plugins> </build> </project> 

NacosApplication

package com.gitee.simons.nacos; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class NacosApplication { public static void main(String[] args) { SpringApplication.run(NacosApplication.class, args); } } 

application.yml

server: port: 8111 spring: application: name: nacos cloud: nacos: config: server-addr: 127.0.0.1:8848 discovery: server-addr: 127.0.0.1:8848 management: endpoints: web: exposure: include: '*' 

啟動即可完成


 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM