SpringCloud和Nacos的介紹原理在這裡就不多說了,百度一大堆,這裡就隻是記錄一下剛開始學習時候項目的使用過程
Nacos-server
我這裡是從官網下載下傳的Nacos-server
下載下傳位址: https://github.com/alibaba/nacos/releases
下載下傳解壓之後就可以啟動使用
修改端口:
用編輯器打開bin目錄下的startup.cmd檔案 添加一行代碼
set "JAVA_OPT=%JAVA_OPT% --server.port=9090
解壓後進入
bin
檔案夾,直接輕按兩下執行startup.cmd檔案,啟動成功如下圖:

啟動成功後,此時Nacos控制台就可以通路了,浏覽器通路:http://127.0.0.1:8848/nacos/index.html ,預設的賬号密碼為nacos/nacos,控制台頁面如下:
建立項目父工程
IDEA中建立聚合項目nacos作為父工程,其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>com.example</groupId>
<artifactId>nacos</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>nacosprovider</module>
<module>nacosconsumer</module>
<module>nacosconfig</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.0.4.RELEASE</spring-boot.version>
<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
<nacos.version>0.2.2.RELEASE</nacos.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${nacos.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
建立服務提供方
在父工程Nacos下建立springboot子工程nacos-provider,其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>nacos</artifactId>
<groupId>com.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-provider</artifactId>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在啟動類NacosProviderApplication.java中增加@EnableDiscoveryClient注解
package com.example.nacosprovider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
}
配置檔案application.yml進行如下配置
server:
port: 8000
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
在服務提供方建立一個對外接口
package com.example.nacosprovider.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProviderController {
@GetMapping("/helloProvider")
public String helloProvider(){
return "你好,我是服務提供者";
}
}
建立服務消費者
仍然在nacos工程下建立一個SpringBoot項目子工程命名為nacos-consumer,其pom檔案與nacos-provider相同。
在啟動類NacosConsumerApplication.java中增加@EnableDiscoveryClient和@EnableFeignClients注解
package com.example.nacosconsumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
}
同樣為nacos-consumer增加配置檔案,内容如下
server:
port: 9000
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
feign:
hystrix:
enabled: true
使用feign進行服務調用,hystrix進行熔斷
項目目錄
在service中進行服務提供者的接口調用
package com.example.nacosconsumer.service;
import com.example.nacosconsumer.service.impl.ConsumerServiceImpl;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "nacos-provider", fallback = ConsumerServiceImpl.class)
public interface ConsumerService {
@GetMapping("/helloProvider")
String getHello();
}
在service的實作類中進行重寫
package com.example.nacosconsumer.service.impl;
import com.example.nacosconsumer.service.ConsumerService;
import org.springframework.stereotype.Component;
@Component
public class ConsumerServiceImpl implements ConsumerService{
@Override
public String getHello() {
return "服務出錯";
}
}
在controller中調用service的接口,像一般的接口調用一樣
package com.example.nacosconsumer.controller;
import com.example.nacosconsumer.service.ConsumerService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class ConsumerController {
@Resource
private ConsumerService consumerService;
@GetMapping("/getHello")
public String getHello(){
return consumerService.getHello();
}
}
調用測試
啟動完成後,在服務提供者和消費者的日志中應該可以分别看到如下資訊
2019-12-10 16:36:37.800 INFO 18452 --- [ main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, application 172.16.74.34:9001 register finished
現在登入Nacos控制台,你會發現服務清單中,已經顯示了我們剛才建立的兩個項目,并可以對其進行簡單的監控和管理。
浏覽器中通路服務消費者的接口 http://localhost/consumer, 可以看到成功傳回結果