溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

發(fā)布時(shí)間:2022-01-12 09:12:55 來(lái)源:億速云 閱讀:160 作者:iii 欄目:云計(jì)算

本篇內(nèi)容介紹了“微服務(wù)開(kāi)發(fā)環(huán)境怎么配置”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

微服務(wù)開(kāi)發(fā)環(huán)境準(zhǔn)備

SpringCloud版本

相關(guān)文檔

  • SpringCloud官網(wǎng) https://spring.io/projects/spring-cloud/

歷史背景

版本號(hào)命名規(guī)則

關(guān)于SpringCloud的分類,根據(jù)SpringCloud版本的命名方式的改變可以分為兩個(gè)階段:

  1. 倫敦地鐵站名

    在Spring Cloud 2020.0.0版本之前,SpringCloud的所有版本均按照倫敦地鐵站站名從A-Z的排序進(jìn)行命名,如下:

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

    為了便于稱呼,一般也都稱之為A版本,B版本,F(xiàn)版本和H版本。

    SR9,每當(dāng)SpringCloud解決了一個(gè)重大bug就會(huì)增加SR版本,SR9就意味著在H版本的基礎(chǔ)上解決了九個(gè)重大bug

  2. 日歷化版本

    從 Spring Cloud 2020.0.0-M1 開(kāi)始,Spring Cloud 廢除了這種英國(guó)倫敦地鐵站的命名方式,而使用了全新的 "日歷化" 版本命名方式。

    什么是日歷化版本?

    英文名稱:Calendar Versioning

    日歷化版本不是基于任意的數(shù)字,而是基于項(xiàng)目的發(fā)布日期的版本控制約定,隨著時(shí)間的推移,版本會(huì)越來(lái)越好。

    Spring Cloud 使用了 YYYY.MINOR.MICRO 的命名規(guī)則:

    預(yù)發(fā)布版本的后綴分隔符也從 . 變更為 -,如:2020.0.0-M12020.0.0-RC2 命名所示。

    使用日歷化版本命名方式,可以更清楚的看出當(dāng)前版本的年份,看到字母、純數(shù)字方式的版本號(hào)都不知道自己多久沒(méi)升級(jí)

    • YYYY:表示 4 位年份;

    • MINOR:代表一個(gè)遞增的數(shù)字,每年以 0 開(kāi)始遞增;

    • MICRO:代表版本號(hào)后綴,就和之前使用的 .0 類似于 .RELEASE 一樣,.2 類似于 .SR2

版本的變化給SpringCloud帶來(lái)了什么樣的改變呢?

SpringCloud的改變目前來(lái)說(shuō)主要體現(xiàn)在對(duì)Netflix套件的支持上,早期SpringCloud主要是封裝了Netflix套件實(shí)現(xiàn)服務(wù)注冊(cè)發(fā)現(xiàn),負(fù)載均衡,熔斷等功能,但是隨著版本的迭代,由于Netflix停止開(kāi)源項(xiàng)目的更新,所以SpringCloud開(kāi)始逐步減少對(duì)Netflix套件的支持。簡(jiǎn)單可以分為以下三個(gè)時(shí)間階段:

  1. 早期,SpringCloud完全封裝Netflix套件,核心功能均有Netflix組件提供

  2. 2018年前后,Netflix 公司宣布其核心組件 Hystrix、Ribbon、Zuul 等均進(jìn)入維護(hù)狀態(tài)。同時(shí)Spring Cloud Netflix 項(xiàng)目進(jìn)入維護(hù)模式,并計(jì)劃在 2020 年廢除。

  3. 北京時(shí)間 2020 年 12 月 22 日深夜,Spring Cloud 2020.0.0 版本正式發(fā)布, Netflix 模塊的全部移除,并且給出替代組件

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

根據(jù)上述變化,簡(jiǎn)單來(lái)說(shuō),H版本和2020版本目前屬于一個(gè)分界線式的版本,從此開(kāi)始,SpringCloud棄用Netflix套件,進(jìn)入一個(gè)新的時(shí)代,但是對(duì)于企業(yè)開(kāi)發(fā)而言,現(xiàn)在未必需要立馬更新最新版本。

一方面大量項(xiàng)目還是采用Netflix組件進(jìn)行開(kāi)發(fā),目前來(lái)看并沒(méi)有替換的必要性。另一方面部分技術(shù)并不能完全兼容新版本,例如SpringCloud Alibaba就不能完全兼容新版本。

總結(jié)

本次教程以H版本為主進(jìn)行學(xué)習(xí),依然采用Netflix組件進(jìn)行微服務(wù)項(xiàng)目開(kāi)發(fā),同時(shí)也會(huì)深入學(xué)習(xí)SpringCloud Alibaba相關(guān)組件,并且根據(jù)我司項(xiàng)目實(shí)際情況,對(duì)認(rèn)證,分布式事務(wù),分布式鎖,分布式日志管理等業(yè)務(wù)場(chǎng)景進(jìn)行功能實(shí)現(xiàn)講解

在我看來(lái),本教程作為承上啟下的作用,對(duì)于廣泛采用Netflix組件的企業(yè)來(lái)說(shuō),學(xué)習(xí)本教程可以快速上手進(jìn)行開(kāi)發(fā),對(duì)于未來(lái)的技術(shù)趨勢(shì)也熟稔于心,可以在合適的時(shí)候進(jìn)行項(xiàng)目的技術(shù)迭代。

下個(gè)版本的教程,將會(huì)推出SpringCloud 2020版本,刪除Netflix組件的同時(shí),更加偏向云原生開(kāi)發(fā)

該教程版本選擇

關(guān)于SpringCloud版本選擇主要考慮的問(wèn)題就是SpringCloud和SpringBoot的兼容性問(wèn)題,關(guān)于這一點(diǎn)建議嚴(yán)格按照官網(wǎng)文檔進(jìn)行,如下:

微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

版本選擇:

  • SpringCloud Hoxton.SR9

  • SpringBoot 2.3.5.RELEASE

  • SpringCloud Alibaba 2.1.2.RELEASE

  • Java版本 Java8

項(xiàng)目搭建

父項(xiàng)目創(chuàng)建

  1. 創(chuàng)建父項(xiàng)目

  2. 確認(rèn)IDEA設(shè)置

    1. Maven設(shè)置

      微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

    2. 文件過(guò)濾 可以不配置

      不顯示 .idea 文件夾

      微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  3. 父項(xiàng)目 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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.baizhi</groupId>
        <artifactId>microservices-cloud</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>pom</packaging>
        <description>統(tǒng)一依賴版本</description>
    
        <properties>
            <java.version>1.8</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
    <!--        版本號(hào)-->
            <spring.cloud-version>Hoxton.SR9</spring.cloud-version>
            <spring.boot-version>2.3.5.RELEASE</spring.boot-version>
            <spring.cloud.alibaba-version>2.1.2.RELEASE</spring.cloud.alibaba-version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <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-dependencies</artifactId>
                    <version>${spring.cloud-version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <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>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>


  4. 設(shè)置跳過(guò)單元測(cè)試

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

商品服務(wù)和訂單服務(wù)創(chuàng)建

通過(guò)Spring Initializr的方式創(chuàng)建項(xiàng)目

微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

Spring Initializr SpringBoot項(xiàng)目工程腳手架,可以直接創(chuàng)建出來(lái)SpringBoot項(xiàng)目,包含application配置文件和啟動(dòng)類等。https://start.spring.io/

類似的腳手架還要Alibaba的Java工程構(gòu)建工具:https://start.aliyun.com/bootstrap.html

IDEA 整合 Alibaba Java工程腳手架 https://start.aliyun.com/article/initializr/springbootideaplugin

商品服務(wù)創(chuàng)建
  1. 選擇通過(guò)Spring Initializr的方式創(chuàng)建項(xiàng)目

  2. 指定使用Alibaba Java工程腳手架的地址https://start.aliyun.com/

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  3. 選擇依賴創(chuàng)建項(xiàng)目

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  4. 修改pom文件,繼承父項(xiàng)目

    1. 修改商品服務(wù)的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      
          <modelVersion>4.0.0</modelVersion>
          <artifactId>cloud-product</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>cloud-product</name>
          <description>商品服務(wù)</description>
      
          <parent>
              <groupId>com.baizhi</groupId>
              <artifactId>cloud-demo</artifactId>
              <version>1.0-SNAPSHOT</version>
          </parent>
      
          <dependencies>
              <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>
                  <exclusions>
                      <exclusion>
                          <groupId>org.junit.vintage</groupId>
                          <artifactId>junit-vintage-engine</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
          </dependencies>
      
      
      </project>


    2. 修改父項(xiàng)目pom文件

      微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  5. 在商品服務(wù)中創(chuàng)建測(cè)試Controller接口

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  6. 編寫application配置文件啟動(dòng)項(xiàng)目

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

訂單服務(wù)創(chuàng)建

微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

效果如下:

微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  1. 選擇通過(guò)Spring Initializr的方式創(chuàng)建項(xiàng)目

  2. 指定使用Alibaba Java工程腳手架的地址

  3. 選擇依賴創(chuàng)建項(xiàng)目

  4. 修改pom文件,繼承父項(xiàng)目

  5. 在訂單服務(wù)中創(chuàng)建測(cè)試Controller接口

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

  6. 編寫application配置文件啟動(dòng)項(xiàng)目

    微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

RestTemplate

訂單服務(wù)如何獲取商品服務(wù)數(shù)據(jù)

服務(wù)調(diào)用:訂單服務(wù)發(fā)請(qǐng)求,請(qǐng)求商品服務(wù),獲取響應(yīng)數(shù)據(jù)

Java代碼怎么發(fā)http請(qǐng)求?

  • HTTPClient Apache

  • RestTemplate Spring

參考資料:https://mp.weixin.qq.com/s/3MfNWtTfckGr2hG9Ly9OPg

RestTemplate簡(jiǎn)介和基本使用

Spring中封裝的通過(guò)Java代碼發(fā)送RestFul請(qǐng)求(HTTP)的模板類,內(nèi)置發(fā)送get post delete等請(qǐng)求的方法,在SpringBoot中只要導(dǎo)入spring-boot-starter-web的依賴可以直接使用。

導(dǎo)入依賴 spring-boot-starter-web
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置RestTemplate

微服務(wù)開(kāi)發(fā)環(huán)境怎么配置

在測(cè)試類中使用RestTemplate的APi發(fā)送請(qǐng)求
package com.baizhi.cloudorder;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

import java.util.HashMap;
import java.util.Map;

@SpringBootTest
class CloudOrderApplicationTests {
    @Autowired
    private RestTemplate restTemplate;

    private String url = "http://localhost:8081/product/getProductById?id=1";
    /**
     * 發(fā)送請(qǐng)求 請(qǐng)求商品服務(wù)
     *
     * 商品服務(wù)接口地址:http://localhost:8081/product/getProductById
     */
    @Test
    void contextLoads() {
        /**
         * getForObject getForEntity
         * 參數(shù)1 url
         * 參數(shù)2 響應(yīng)數(shù)據(jù)的類型的類對(duì)象
         * 參數(shù)3 url參數(shù)【可以不要 參數(shù)可以直接?拼接】
         *
         * getForObject 返回值是被調(diào)用接口的響應(yīng)數(shù)據(jù)
         * getForEntity 返回值是響應(yīng)體對(duì)象,包含更多的數(shù)據(jù):接口響應(yīng)數(shù)據(jù),響應(yīng)狀態(tài)碼等
         */
        String result = restTemplate.getForObject(url, String.class);
        System.out.println(result);

        ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class);
        System.out.println(entity.getStatusCode());
        System.out.println(entity.getBody());

    }


    @Test
    void test1() {
//        通過(guò)map封裝參數(shù)
        Map map = new HashMap();
        map.put("id",1);

        String result = restTemplate.getForObject(
                "http://localhost:8081/product/getProductById?id={id}",
                String.class,
                map
        );

        System.out.println(result);


    }

}

最后商品服務(wù)通過(guò)RestTemplate調(diào)用訂單服務(wù)

“微服務(wù)開(kāi)發(fā)環(huán)境怎么配置”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI