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上,大功告成!

 

posted @ 2020-08-12 11:22  real_zhui  阅读(14016)  评论(1编辑  收藏  举报