SpringCloud+Nacos整合
之前在公司用过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上,大功告成!