SpringCloud 2020版本教程1:使用nacos做爲註冊中心和配置中心

使用nacos做爲註冊中心和配置中心

本次教程旨在爲讀者提供2020版本的最佳實踐方案,使用我認爲最容易學習的組件,可能不少組件有不少替代方案,在這裏不依依講述。本次教程使用的組件以下:html

  • 註冊中心:nacos,替代方案eureka、consul、zookeeper
  • 配置中心: nacos ,替代方案sc config、consul config
  • 服務調用:feign,替代方案:resttempate
  • 熔斷:sentinel、,替代方案:Resilience4j
  • 熔斷監控:sentinel dashboard
  • 負載均衡:sc loadbalancer
  • 網關:spring cloud gateway
  • 鏈路:spring cloud sleuth+zipkin,替代方案:skywalking等。

本次教程整體架構以下:java

使用nacos做爲註冊中心

下載nacos,並啓動

Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。下載地址github.com/alibaba/nac…linux

下載完成後,解壓,在解壓後的文件的/bin目錄下,windows系統點擊startup.cmd就能夠啓動nacos。linux或mac執行如下命令啓動nacos。git

sh startup.sh -m standalone
複製代碼

登錄頁面:http://localhost:8848/nacos/,登錄用戶nacos,登錄密碼爲nacos。github

工程案例

本小節工單案例包括2個,一個服務提供者provider 、服務消費者consumer。web

在父pom文件引入相關的依賴,以下:spring

<properties>
       <java.version>1.8</java.version>
       <spring-boot.version>2.4.4</spring-boot.version>
       <spring-cloud.version>2020.0.2</spring-cloud.version>
       <spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
   </properties>


<dependencyManagement>
       <dependencies>
           <!-- spring boot 依賴 -->
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-dependencies</artifactId>
               <version>${spring-boot.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!-- spring cloud 依賴 -->
           <dependency>
               <groupId>org.springframework.cloud</groupId>
               <artifactId>spring-cloud-dependencies</artifactId>
               <version>${spring-cloud.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
           <!-- spring cloud alibaba 依賴 -->
           <dependency>
               <groupId>com.alibaba.cloud</groupId>
               <artifactId>spring-cloud-alibaba-dependencies</artifactId>
               <version>${spring-cloud-alibaba.version}</version>
               <type>pom</type>
               <scope>import</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>

複製代碼

服務提供者provider

在provider的pom文件引入依賴:windows

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
複製代碼

配置文件application.yml:瀏覽器

server:
  port: 8762

spring:
  application:
    name: provider

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
複製代碼

寫一個接口:markdown

@SpringBootApplication
@RestController
@EnableDiscoveryClient
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }


    @Value("${server.port}")
    String port;

    @GetMapping("/hi")
    public String hi(@RequestParam(value = "name", defaultValue = "forezp",required = false) String name) {
        return "hello " + name + ", i'm provider ,my port:" + port;

    }
}
複製代碼

服務消費者consumer

在pom文件引入如下依賴:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>


複製代碼

須要注意的是引入openfeign,必需要引入loadbalancer,不然沒法啓動。

配置文件:

server:
  port: 8763

spring:
  application:
    name: consumer

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        
複製代碼

在工程的啓動文件開啓FeignClient的功能:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {


    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }

}
複製代碼

寫一個FeignClient,去調用provider服務的接口:

@FeignClient(value = "provider" )
public interface ProviderClient {

    @GetMapping("/hi")
    String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}

複製代碼

寫一個接口,讓consumer去調用provider服務的接口:

@RestController
public class ConsumerController {

    @Autowired
    ProviderClient providerClient;

    @GetMapping("/hi-feign")
    public String hiFeign(){
        return providerClient.hi("feign");
    }
}

複製代碼

啓動兩個工程,在nacos頁面查看,可見2個服務都已經註冊成功:

服務調用

在瀏覽器上輸入http://localhost:8763/hi-feign,瀏覽器返回響應:

hello feign, i'm provider ,my port:8762
複製代碼

可見瀏覽器的請求成功調用了consumer服務的接口,consumer服務也成功地經過feign成功的調用了provider服務的接口。

使用sc loadbanlancer做爲負載均衡

其實feign使用了spring cloud loadbanlancer做爲負載均衡器。 能夠經過修改provider的端口,再在本地啓動一個新的provider服務,那麼本地有2個provider 服務,端口分別爲8761 和8762。在瀏覽器上屢次調用http://localhost:8763/hi-feign,瀏覽器會交替顯示:

hello feign, i'm provider ,my port:8762

hello feign, i'm provider ,my port:8761

複製代碼

使用nacos做爲配置中心

在此教程中不講述,請參考:www.fangzhipeng.com/springcloud…

源碼下載

github.com/forezp/Spri…

相關文章
相關標籤/搜索