日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

闪聚支付-第1章-Nacos-服务发现与配置管理

發布時間:2024/1/18 编程问答 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 闪聚支付-第1章-Nacos-服务发现与配置管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習目標

  • 能夠理解微服務架構的特點
  • 能夠理解服務發現的流程
  • 能夠說出Nacos的功能
  • 掌握Nacos的安裝方法
  • 掌握RESTful服務發現開發方法
  • 掌握Dubbo服務發現開發方法
  • 理解Nacos服務發現的數據模型
  • 能夠掌握Nacos配置管理方法
  • 掌握Nacos擴展配置方法

理解服務發現

微服務架構

為適應企業的業務發展,提高軟件研發的生產力,降低軟件研發的成本,軟件架構也作了升級和優化,將一個獨立的系統拆分成若干小的服務,每個小服務運行在不同的進程中,服務與服務之間采用RESTful、RPC等協議傳輸數據,每個服務所擁有的功能具有獨立性強的特點,這樣的設計就實現了單個服務的高內聚,服務與服務之間的低耦合效果,這些小服務就是微服務,基于這種方法設計的系統架構即微服務架構。

下圖是基于微服務架構的電商系統:

特點
  • 服務層按業務拆分為一個一個的微服務。
  • 微服務的職責單一。
  • 微服務之間采用RESTful、RPC等輕量級協議傳輸。
  • 有利于采用前后端分離架構。
  • 理解服務發現

    測試環境

    在微服務架構中,整個系統會按職責能力劃分為多個服務,通過服務之間協作來實現業務目標。這樣在我們的代碼中免不了要進行服務間的遠程調用,服務的消費方要調用服務的生產方,為了完成一次請求,消費方需要知道服務生產方的網絡位置(IP地址和端口號)。

    我們的代碼可以通過讀取配置文件的方式讀取服務生產方網絡位置,如下:

    我們通過Spring boot技術很容易實現:

    1、創建nacos-discovery父工程

    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.itheima.nacos</groupId><artifactId>nacos-discovery</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.3.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement> </project>
    2、Service B(服務生產者)

    創建服務提供者 nacos-restful-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-discovery</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>nacos-restful-provider</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

    Service B是服務的生產方,暴露/service服務地址,實現代碼如下:

    1、創建Controller

    package com.itheima.nacos.provider.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class RestProviderController {//暴露RESTful接口@GetMapping(value = "/service")public String service() {System.out.println("provider invoke");return "provider invoke";} }

    2、創建啟動類

    package com.itheima.nacos.provider;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class SpringRestProviderBootstrap {public static void main(String[] args) {SpringApplication.run(SpringRestProviderBootstrap.class, args);} }

    3、配置文件

    創建application.yml,內容如下:

    server:port: 56010
    3、Service A(服務消費者)

    創建nacos-restful-consumer 服務消費工程。

    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-discovery</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>nacos-restful-provider</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

    實現代碼:

    1、創建controller

    package com.itheima.nacos.consumer.controller;import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;@RestController public class RestConsumerController {//要進行遠程,需要知識提供方的ip和端口@Value("${provider.address}")private String provider;@GetMapping(value = "/service")public String service() {//遠程調用服務RestTemplate restTemplate = new RestTemplate();String result = restTemplate.getForObject("http://" + provider + "/service", String.class);return "consumer invode|" + result;} }

    2、創建啟動類

    package com.itheima.nacos.consumer;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class SpringRestConsumerBootstrap {public static void main(String[] args) {SpringApplication.run(SpringRestConsumerBootstrap.class, args);} }

    3、配置文件:

    創建application.yml,內容如下:

    server:port: 56020#配置服務提供方的地址(ip和端口) provider:address: 127.0.0.1:56010

    啟動項目,訪問http://127.0.0.1:56020/service,輸出以下內容:

    服務發現流程

    上邊的例子看上去很完美,但是,仔細考慮以下,此方案對于微服務應用而言行不通。首先,微服務可能是部署在云環境的,服務實例的網絡位置或許是動態分配的。另外,每一個服務一般會有多個實例來做負載均衡,由于宕機或升級,服務實例網絡地址會經常動態改變。再者,每一個服務也可能應對臨時訪問壓力增加新的服務節點。正如下圖所示:

    基于以上的問題,服務之間如何相互發現?服務如何管理?這就是服務發現的問題了。

    服務發現就是服務消費方通過服務發現中心智能發現服務提供方,從而進行遠程調用的過程。

    如下圖:

    上圖中服務實例本身并不記錄服務生產方的網絡地址,所有服務實例內部都會包含服務發現客戶端

    (1)在每個服務啟動時會向服務發現中心上報自己的網絡位置。這樣,在服務發現中心內部會形成一個服務注冊表服務注冊表是服務發現的核心部分,是包含所有服務實例的網絡地址的數據庫。

    (2)服務發現客戶端會定期從服務發現中心同步服務注冊表 ,并緩存在客戶端。

    (3)當需要對某服務進行請求時,服務實例通過該注冊表,定位目標服務網絡地址。若目標服務存在多個網絡地址,則使用負載均衡算法從多個服務實例中選擇出一個,然后發出請求。

    總結,在微服務環境中,由于服務運行實例的網絡地址是不斷動態變化的,服務實例數量的動態變化 ,因此無法使用固定的配置文件來記錄服務提供方的網絡地址,必須使用動態的服務發現機制用于實現微服務間的相互感知。各服務實例會上報自己的網絡地址,這樣服務中心就形成了一個完整的服務注冊表,各服務實例會通過服務發現中心來獲取訪問目標服務的網絡地址,從而實現服務發現的機制。

    Nacos 服務發現

    Nacos簡介

    服務發現產品對比

    目前市面上用的比較多的服務發現中心有:Nacos、Eureka、Consul和Zookeeper。

    從上面對比可以了解到,Nacos作為服務發現中心,具備更多的功能支持項,且從長遠來看Nacos在以后的版本會支持SpringCLoud+Kubernetes的組合,填補 2 者的鴻溝,在兩套體系下可以采用同一套服務發現和配置管理的解決方案,這將大大的簡化使用和維護的成本。另外,Nacos 計劃實現 Service Mesh,也是未來微服務發展的趨勢。

    Nacos簡介


    Nacos是阿里的一個開源產品,它是針對微服務架構中的服務發現、配置管理、服務治理的綜合型解決方案。

    官方是這樣介紹的:

    Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您實現動態服務發現、服務配置管理、服務及流量管理。 Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平臺。Nacos 是構建以“服務”為中心的現代應用架構的服務基礎設施。

    官網地址:https://nacos.io

    Nacos特性

    Nacos主要提供以下四大功能:

    1. 服務發現與服務健康檢查

    ????Nacos使服務更容易注冊,并通過DNS或HTTP接口發現其他服務,Nacos還提供服務的實時健康檢查,以防止向不健康的主機或服務實例發送請求。

    2. 動態配置管理

    ????動態配置服務允許您在所有環境中以集中和動態的方式管理所有服務的配置。Nacos消除了在更新配置時重新部署應用程序,這使配置的更改更加高效和靈活。

    3. 動態DNS服務

    ????Nacos提供基于DNS 協議的服務發現能力,旨在支持異構語言的服務發現,支持將注冊在Nacos上的服務以域名的方式暴露端點,讓三方應用方便的查閱及發現。

    4. 服務和元數據管理

    ????Nacos 能讓您從微服務平臺建設的視角管理數據中心的所有服務及元數據,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略。

    這里1、3、4說明了服務發現的功能特性。

    安裝Nacos Server

    預備環境準備

    Nacos 依賴 Java 環境來運行。如果您是從代碼開始構建并運行Nacos,還需要為此配置 Maven環境,請確保是在以下版本環境中安裝使用:

  • 64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac;
  • 64 bit JDK 1.8+;下載 & 配置。
  • Maven 3.2.x+;下載 & 配置。
  • 下載源碼或者安裝包

    你可以通過源碼和發行包兩種方式來獲取 Nacos。

    從 Github 上下載源碼方式
    git clone https://github.com/alibaba/nacos.gitcd nacos/mvn ‐Prelease‐nacos clean install ‐Uls ‐al distribution/target/// change the $version to your actual path cd distribution/target/nacos‐server‐$version/nacos/bin
    下載編譯后壓縮包方式

    您可以從最新穩定版本下載 nacos-server-$version.zip 包,本教程使用nacos-server-1.1.3版本。

    下載地址:https://github.com/alibaba/nacos/releases

    下載后解壓:

    unzip nacos‐server‐$version.zip 或者 tar ‐xvf nacos‐server‐$version.tar.gz cd nacos/bin
    啟動服務器

    nacos的默認端口是8848,需要保證8848默認端口沒有被其他進程占用。

    進入安裝程序的bin目錄

    Linux/Unix/Mac啟動方式

    啟動命令(standalone代表著單機模式運行,非集群模式):

    sh startup.sh -m standalone

    如果您使用的是ubuntu系統,或者運行腳本報錯提示[[符號找不到,可嘗試如下運行:

    bash startup.sh -m standalone
    Windows啟動方式

    啟動命令:

    cmd startup.cmd

    或者雙擊startup.cmd運行文件。

    啟動成功,可通過瀏覽器訪問 http://127.0.0.1:8848/nacos ,打開如下nacos控制臺登錄頁面:

    使用默認用戶名:nacos,默認密碼:nacos 登錄即可打開主頁面。

    外部mysql數據庫支持

    單機模式時nacos默認使用嵌入式數據庫實現數據的存儲,若想使用外部mysql存儲nacos數據,需要進行以下步驟:

  • 安裝數據庫,版本要求:5.6.5+ ,mysql 8 以下
  • 初始化mysql數據庫,新建數據庫nacos_config,數據庫初始化文件${nacoshome}/conf/nacosmysql.sql
  • 修改${nacoshome}/conf/application.properties文件,增加支持mysql數據源配置(目前只支持mysql),添加mysql數據源的url、用戶名和密碼。
  • spring.datasource.platform=mysqldb.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=root

    RESTful服務發現

    測試環境

    Spring Cloud是一套微服務開發框架集合,包括微服務開發的方方頁面,Spring Cloud是一套微服務開發的標準,集成了很多優秀的開源框架,比如有名的Netflix公司的眾多項目。

    Spring Cloud 項目地址:https://spring.io/projects/spring-cloud

    本測試環境采用阿里開源的Spring Cloud Alibaba微服務開發框架,Spring Cloud Alibaba是阿里巴巴公司基于Spring Cloud標準實現一套微服務開發框架集合,它和Netflix一樣都是Spring Cloud微服務開發實現方案。

    Spring Cloud Alibaba項目地址:https://github.com/alibaba/spring-cloud-alibaba

    通過Spring Cloud Alibaba實現解決:

  • 服務發現客戶端從服務發現中心獲取服務列表
  • 服務消費方通過負載均衡獲取服務地址
  • 在nacos-discovery父工程中添加依賴管理

    <dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.1.3.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies> </dependencyManagement>

    分別在服務提供及服務消費工程中添加依賴,此依賴的作用是服務發現

    <!--服務發現的客戶端,1、將自己的地址注冊到服務發現中心,2、從服務發現中心獲取服務列表--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
    服務注冊

    在服務提供工程中的application.yml中配置nacos服務發現相關的配置:

    服務提供:

    spring:application:name: nacos-restful-provider #服務名cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #服務發現中心地址

    啟動nacos

    啟動服務提供

    觀察nacos服務列表,nacos-restful-provider注冊成功

    服務名稱:每個服務在服務注冊中心的標識,相當于Java中的類名。

    服務實例:網絡中提供服務的實例,具有IP和端口,相當于Java中的對象,一個實例即為運行在服務器上的一個進程。

    服務發現

    在服務消費工程中的application.yml配置nacos服務發現相關的配置:

    服務消費:

    spring:application:name: nacos-restful-consumer #服務名cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #服務發現中心地址

    修改Controller中遠程調用的代碼:

    //服務id即注冊中心的中的服務名 private String serviceId = "nacos‐restful‐provider";//通過負載均衡發現地址,流程是從服務發現中心拿nacos-restful-provider服務的列表,通過負載均衡算法獲取一個地址 @Autowired private LoadBalancerClient loadBalancerClient;@GetMapping(value = "/service1") public String service1() {//遠程調用RestTemplate restTemplate = new RestTemplate();//發現一個地址ServiceInstance serviceInstance = loadBalancerClient.choose(serviceId);//獲取一個http://開頭的地址,包括ip和端口URI uri = serviceInstance.getUri();String result = restTemplate.getForObject(uri + "/service", String.class);return "consumer invode|" + result; }

    執行流程:

  • 服務提供方將自己注冊到服務注冊中心
  • 服務消費方從注冊中心獲取服務地址
  • 進行遠程調用
  • 啟動消費方工程,訪問http://localhost:56020/service

    訪問http://127.0.0.1:8848/nacos,可以看到消費方工程也注冊到nacos中。如下:

    負載均衡

    在RESTful服務發現的流程中,ServiceA通過負載均衡調用ServiceB,下邊來了解一下負載均衡

    負載均衡就是將用戶請求(流量)通過一定的策略,分攤在多個服務實例上執行,它是系統處理高并發、緩解網絡壓力和進行服務端擴容的重要手段之一。它分為服務端負載均衡客戶端負載均衡

    服務器端負載均衡


    在負載均衡器中維護一個可用的服務實例清單,當客戶端請求來臨時,負載均衡服務器按照某種配置好的規則(負載均衡算法)從可用服務實例清單中選取其一去處理客戶端的請求。這就是服務端負載均衡。

    例如Nginx,通過Nginx進行負載均衡,客戶端發送請求至Nginx,Nginx通過負載均衡算法,在多個服務器之間選擇一個進行訪問。即在服務器端再進行負載均衡算法分配。

    客戶端服務負載均衡


    上邊使用的LoadBalancerClient就是一個客戶端負載均衡器,具體使用的是Ribbon客戶端負載均衡器。

    Ribbon在發送請求前通過負載均衡算法選擇一個服務實例,然后進行訪問,這是客戶端負載均衡。即在客戶端就進行負載均衡的分配。

    Ribbon是一個客戶端負載均衡器,它的責任是從一組實例列表中挑選合適的實例,如何挑選?取決于負載均衡策略

    Ribbon核心組件IRule是負載均衡策略接口,它有如下實現,大家僅做了解:

    • RoundRobinRule(默認):輪詢,即按一定的順序輪換獲取實例的地址。
    • RandomRule:隨機,即以隨機的方式獲取實例的地址。
    • AvailabilityFilteringRule: 會先過濾掉由于多次訪問故障而處于斷路器跳閘狀態的服務,以及并發的連接數量超過閾值的服務,然后對剩余的服務列表按照輪詢策略進行訪問;
    • WeightedResponseTimeRule: 根據平均響應時間計算所有服務的權重,響應時間越快,服務權重越大,被選中的機率越高;
      剛啟動時,如果統計信息不足,則使用RoundRobinRule策略,等統計信息足夠時,會切換到WeightedResponseTimeRule
    • RetryRule: 先按照RoundRobinRule的策略獲取服務,如果獲取服務失敗,則在指定時間內會進行重試,獲取可用的服務;
    • BestAvailableRule: 會先過濾掉由于多次訪問故障而處于斷路器跳閘狀態的服務,然后選擇一個并發量最小的服務;
    • ZoneAvoidanceRule: 默認規則,復合判斷server所在區域的性能和server的可用性選擇服務器;
    準備測試環境

    啟動多個服務提供方進程,為保證端口不沖突,通過啟動參數配置端口,并啟動這兩個進程。


    可通過下面方式在服務消費方的 配置文件中修改默認的負載均衡策略:

    nacos-restful-provider:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    • nacos-restful-provider :即服務提供方的服務名稱。
    • com.netflix.loadbalancer.RandomRule:負載均衡類路徑。
    小結

    服務注冊與發現流程

  • 服務提供方將自己注冊到服務注冊中心
  • 服務消費方從注冊中心獲取服務地址
  • 通過客戶端負載均衡器進行遠程調用
  • Dubbo服務發現

    Dubbo是阿里巴巴公司開源的RPC框架,在國內有著非常大的用戶群體,但是其微服務開發組件相對Spring Cloud來說并不那么完善。

    Spring Cloud Alibaba微服務開發框架集成了Dubbo,可實現微服務對外暴露Dubbo協議的接口,Dubbo協議相比RESTful協議速度更快。

    RPC:RPC是遠程過程調用(Remote Procedure Call)的縮寫形式,調用RPC遠程方法就像調用本地方法一樣,非常方便,后邊案例講解具體過程。

    Dubbo服務架構

    下圖是微服務采用Dubbo協議的系統架構圖:

    組件說明:

  • 客戶端:前端或外部系統
  • API網關:系統唯一入口,路由轉發
  • application-1 :應用1,前端提供Http接口,接收用戶的交互請求
  • service-1 :微服務1,提供業務邏輯處理服務
  • service-2:微服務2,提供業務邏輯處理服務
  • 交互流程:

  • 網關負責客戶端請求的統一入口,路由轉發,前端通過網關請求后端服務。
  • 網關收到前端請求,轉發請求給應用。
  • 應用接收前端請求,調用微服務進行業務邏輯處理
  • 微服務為應用提供業務邏輯處理的支撐,為應用提供Dubbo協議接口
  • 優勢分析:

    此架構同時提供RESTful和Dubbo接口服務,應用層對前端提供RESTful接口,RESTful是互聯網通用的輕量級交互協議,方便前端接入系統;微服務層向應用層提供Dubbo接口,Dubbo接口基于RPC通信協議速度更快。

    本架構采用阿里開源的Nacos,集服務發現和配置中心于一身,支持RESTful及Dubbo服務的注冊。

    測試環境

    父工程:仍然使用nacos-dicovery。

    application1:使用nacos-restful-consumer。

    service1微服務:需要新建。

    service2微服務:需要新建。

    api網關:后邊的課程內容講解。

    service2微服務

    service2對外暴露dubbo協議的接口,考慮遠程接口可能 會被其它多個服務調用,這里將service2的接口單獨抽取出api工程,service2微服務工程的結構如下:

    service2-api:存放接口,獨立成一個工程方便被其它服務工程依賴。

    service2-server:存放接口實現,即dubbo服務的實現部分。

    定義service2-api

    1、創建service2工程

    <?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-discovery</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>nacos‐dubbo‐service2</artifactId></project>

    2、創建service2-api工程

    <?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‐dubbo‐service2</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>service2-api</artifactId></project>

    3、定義接口

    package com.itheima.microservice.service2.api;public interface Service2Api {public String dubboService2(); }
    定義service2-server

    1、創建service2-server工程

    <?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‐dubbo‐service2</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>service2-server</artifactId><dependencies><dependency><groupId>com.itheima.nacos</groupId><artifactId>service2-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies> </project>

    2、定義接口實現

    注意:使用@org.apache.dubbo.config.annotation.Service標記dubbo服務

    package com.itheima.microservice.service2.service;import com.itheima.microservice.service2.api.Service2Api;@org.apache.dubbo.config.annotation.Service public class Service2ApiImpl implements Service2Api {public String dubboService2() {return "dubboService2";} }

    3、定義啟動類

    package com.itheima.microservice.service2;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class Service2Bootstrap {public static void main(String[] args) {SpringApplication.run(Service2Bootstrap.class, args);} }

    4、定義配置文件bootstrap.yml

    server:port: 56040 #啟動端口 命令行注入spring:application:name: dubbo-service2main:allow-bean-definition-overriding: true # Spring Boot 2.1 需要設定cloud:nacos:discovery:server-addr: 127.0.0.1:8848 dubbo:scan:# dubbo 服務掃描基準包base-packages: com.itheima.microservice.service2.serviceprotocol:# dubbo 協議name: dubbo# dubbo 協議端口port: 20891registry:address: nacos://127.0.0.1:8848application:qos-enable: false #dubbo運維服務是否開啟consumer:check: false #啟動時是否檢查依賴的服務

    5、啟動service2-server,啟動成功觀察nacos的服務列表

    6、bootstrap.yml配置說明

    bootstrap.yml內容中以dubbo開頭的為dubbo服務 的配置:

    • dubbo.scan.base-packages ::指定 Dubbo 服務實現類的掃描基準包,將 @org.apache.dubbo.config.annotation.Service 注解標注的service暴露為dubbo服務。
    • dubbo.protocol :Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱, port 為dubbo協議端口可以指定多協議,如:dubbo.protocol.rmi.port=1099
    • dubbo.registry :Dubbo 服務注冊中心配置,其中子屬性 address 的值 nacos://127.0.0.1:8848 ,說明dubbo服務注冊到nacos,相當于原生dubbo的xml配置中的 <dubbo:registry address="10.20.153.10:9090" />

    bootstrap.yml內容的上半部分為SpringCloud的相關配置:

    • spring.application.name :Spring 應用名稱,用于 Spring Cloud 服務注冊和發現。
      該值在 Dubbo Spring Cloud 加持下被視作 dubbo.application.name ,因此,無需再顯示地配置 dubbo.application.name
    • spring.cloud.nacos.discovery : Nacos 服務發現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口
    application1調用service2

    根據dubbo服務的架構圖,本章節將nacos-restful-consumer作為application1,實現application1調用service2。

    引用service2

    在nacos-restful-consumer工程中引用service2依賴

    在pom.xml中引入service2-api的依賴

    <dependency><groupId>com.itheima.nacos</groupId><artifactId>service2-api</artifactId><version>1.0-SNAPSHOT</version> </dependency>

    引入 spring-cloud-starter-dubbo依賴,它會根據接口生成代理對象

    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId> </dependency>
    實現遠程調用

    修改nacos-restful-consumer工程的RestConsumerController:

    @org.apache.dubbo.config.annotation.Reference private Service2Api service2Api;@GetMapping(value = "/service2") public String service2() {//遠程調用service2String providerResult = service2Api.dubboService2();return "consumer dubbo invoke |" + providerResult; }

    注意:這里的 @Reference 注解是 org.apache.dubbo.config.annotation.Reference

    測試:啟動nacos-restful-consumer工程

    請求:http://127.0.0.1:56020/service2

    顯示:consumer dubbo invoke | dubboService2 表明service2調用成功。

    service1微服務

    service1采用和service2相同的工程結構。

    本節實現service1對外暴露dubbo接口,并用實現service1調用service2。

    定義service1-api

    1、創建service1工程

    <?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-discovery</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>nacos‐dubbo‐service1</artifactId></project>

    2、創建service1-api工程

    <?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‐dubbo‐service1</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>service1‐api</artifactId></project>

    3、定義接口

    package com.itheima.microservice.service1.api;public interface Service1Api {public String dubboService1(); }
    定義service1-server

    1、創建service1-server工程

    由于實現service1調用service2,這里需要引入 service2依賴。

    <?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‐dubbo‐service1</artifactId><groupId>com.itheima.nacos</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><groupId>com.itheima.nacos</groupId><artifactId>service1‐server</artifactId><dependencies><dependency><groupId>com.itheima.nacos</groupId><artifactId>service1‐api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.itheima.nacos</groupId><artifactId>service2-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies></project>

    2、定義接口實現

    package com.itheima.microservice.service1.service;import com.itheima.microservice.service1.api.Service1Api; import com.itheima.microservice.service2.api.Service2Api;@org.apache.dubbo.config.annotation.Service public class Service1ApiImpl implements Service1Api {@org.apache.dubbo.config.annotation.Referenceprivate Service2Api service2Api;public String dubboService1() {//遠程調用service2String s = service2Api.dubboService2();return "dubboService1|" + s;} }

    3、定義啟動類

    package com.itheima.microservice.service1;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class Service1Bootstrap {public static void main(String[] args) {SpringApplication.run(Service1Bootstrap.class, args);} }

    4、定義配置文件bootstrap.yml

    server:port: 56030 #啟動端口 命令行注入spring:application:name: dubbo-service1main:allow-bean-definition-overriding: true # Spring Boot 2.1 需要設定cloud:nacos:discovery:server-addr: 127.0.0.1:8848 dubbo:scan:# dubbo 服務掃描基準包base-packages: com.itheima.microservice.service1.serviceprotocol:# dubbo 協議name: dubbo# dubbo 協議端口port: 20881registry:address: nacos://127.0.0.1:8848application:qos-enable: false #dubbo運維服務是否開啟consumer:check: false #啟動時是否檢查依賴的服務

    5、啟動service1-server,啟動成功觀察nacos的服務列表

    application1調用service1

    參考 application1調用service2的方法實現。

    1、在application1引入 service1-api的依賴

    <dependency><groupId>com.itheima.nacos</groupId><artifactId>service1‐api</artifactId><version>1.0-SNAPSHOT</version> </dependency>

    2、在application1的controller中調用service1接口

    @org.apache.dubbo.config.annotation.Reference private Service1Api service1Api;@GetMapping(value = "/service3") public String service3() {//遠程調用service1String providerResult = service1Api.dubboService1();return "consumer dubbo invoke |" + providerResult; }

    3、測試,請求http://127.0.0.1:56020/service3

    顯示 :consumer dubbo invoke | dubboService1|dubboService2,表明調用service1成功,service1調用service2成功。

    服務發現數據模型

    Namespace 隔離設計

    命名空間(Namespace)用于進行租戶粒度的隔離,Namespace 的常用場景之一是不同環境的隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。

    從一個租戶(用戶)的角度來看,如果有多套不同的環境,那么這個時候可以根據指定的環境來創建不同的namespce,以此來實現多環境的隔離。例如,你可能有開發,測試和生產三個不同的環境,那么使用一套nacos 集群可以分別建以下三個不同的 namespace。如下圖所示:

    從多個租戶(用戶)的角度來看,每個租戶(用戶)可能會有自己的 namespace,每個租戶(用戶)的配置數據以及注冊的服務數據都會歸屬到自己的 namespace 下,以此來實現多租戶間的數據隔離。例如超級管理員分配了三個租戶,分別為張三、李四和王五。分配好了之后,各租戶用自己的賬戶名和密碼登錄后,創建自己的命名空間。如下圖所示:

    注意: 在此教程編寫之時,nacos多租戶(用戶)功能還在規劃中。

    命名空間管理

    前面已經介紹過,命名空間(Namespace)是用于隔離多個環境的(如開發、測試、生產),而每個應用在不同環境的同一個配置(如數據庫數據源)的值是不一樣的。因此,我們應針對企業項目實際研發流程、環境進行規劃。如某軟件公司擁有開發、測試、生產三套環境,那么我們應該針對這三個環境分別建立三個namespace。

    建立好所有namespace后,在配置管理與服務管理模塊下所有頁面,都會包含用于切換namespace(環境)的tab按鈕,如下圖:

    注意:

    namesace 為 public 是 nacos 的一個保留空間,如果您需要創建自己的 namespace,不要和 public重名,以一個實際業務場景有具體語義的名字來命名,以免帶來字面上不容易區分自己是哪一個namespace。

    在編寫程序獲取配置集時,指定的namespace參數一定要填寫命名空間ID,而不是名稱

    數據模型

    Nacos在經過阿里內部多年生產經驗后提煉出的數據模型,則是一種服務-集群-實例的三層模型,這樣基本可以滿足服務在所有場景下的數據存儲和管理。

    nacos服務發現的數據模型如下:

    服務

    ??????對外提供的軟件功能,通過網絡訪問預定義的接口。

    服務名

    ??????服務提供的標識,通過該標識可以唯一確定要訪問的服務。

    實例

    ??????提供一個或多個服務的具有可訪問網絡地址(IP:Port)的進程,啟動一個服務,就產生了一個服務實例。

    元信息

    ??????Nacos數據(如配置和服務)描述信息,如服務版本、權重、容災策略、負載均衡策略、鑒權配置、各種自定義標簽 (label),從作用范圍來看,分為服務級別的元信息、集群的元信息及實例的元信息。

    集群

    ??????服務實例的集合,服務實例組成一個默認集群, 集群可以被進一步按需求劃分,劃分的單位可以是虛擬集群,相同集群下的實例才能相互感知。

    通過數據模型可知:

    ??????應用通過Namespace、Service、Cluster(DEFAULT)的配置,描述了該服務向哪個環境(如開發環境)的哪個集群注冊實例。

    例子如下:

    ??????指定namespace的id:4d2fe0e0-1544-4033-b06e-73fd3c1ce03e(注意根據自己環境設置namespace的id)

    ??????指定集群名稱:DEFAULT表示默認集群,可不填寫

    例如可以在nacos-restful-consumer工程的application.yml配置文件中添加如下:

    spring:application:name: nacos-restful-consumer #服務名cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #服務發現中心地址namespace: 4d2fe0e0-1544-4033-b06e-73fd3c1ce03e #開發環境cluster-name: DEFAULT # 默認集群,可不填寫

    測試:先啟動service2,再啟動service1,最后啟動consumer工程。

    啟動nacos-restful-consumer工程,但是會報錯,提示找不到nacos‐dubbo‐service2工程提供的接口,因為nacos-restful-consumer是在dev環境下開發(我們配置的namespace為dev的id),而nacos‐dubbo‐service2是在public環境下開發,所以還要在nacos‐dubbo‐service2工程中的配置文件中配置namespace和nacos-restful-consumer工程配置一樣的namespace,另外還有其他依賴的工程都要配置namespace

    注意:

    集群作為實例的隔離,相同集群的實例才能相互感知。

    namespace、cluster-name若不填寫都將采取默認值,namespace的默認是public命名空間,cluster-name的默認值為DEFAULT集群。

    Nacos配置管理

    理解配置中心

    什么是配置

    應用程序在啟動和運行的時候往往需要讀取一些配置信息,配置基本上伴隨著應用程序的整個生命周期,比如:數據庫連接參數、啟動參數等。

    配置主要有以下幾個特點

    1、配置是獨立于程序的只讀變量

    ??????配置對于程序是只讀的,程序通過讀取配置來改變自己的行為,但是程序不應該去改變配置

    2、配置伴隨應用的整個生命周期

    ??????配置貫穿于應用的整個生命周期,應用在啟動時通過讀取配置來初始化,在運行時根據配置調整行為。

    ??????比如:啟動時需要讀取服務的端口號、系統在運行過程中需要讀取定時策略執行定時任務等。

    3、配置可以有多種加載方式

    ??????常見的有程序內部hard code,配置文件,環境變量,啟動參數,基于數據庫等

    4、配置需要治理

    ??????同一份程序在不同的環境(開發,測試,生產)、不同的集群(如不同的數據中心)經常需要有不同的配置,所以需要有完善的環境、集群配置管理

    什么是配置中心

    在微服務架構中,當系統從一個單體應用,被拆分成分布式系統上一個個服務節點后,配置文件也必須跟著遷移(分割),這樣配置就分散了,不僅如此,分散中還包含著冗余,如下圖:

    下圖顯示了配置中心的功能,配置中心將配置從各應用中剝離出來,對配置進行統一管理,應用自身不需要自己去管理配置。

    配置中心的服務流程如下:

  • 用戶在配置中心更新配置信息。
  • 服務A和服務B及時得到配置更新通知,從配置中心獲取配置。
  • 總得來說,配置中心就是一種統一管理各種應用配置的基礎服務組件。

    在系統架構中,配置中心是整個微服務基礎架構體系中的一個組件,如下圖,它的功能看上去并不起眼,無非就是配置的管理和存取,但它是整個微服務架構中不可或缺的一環。

    總結一下,在傳統巨型單體應用紛紛轉向細粒度微服務架構的歷史進程中,配置中心是微服務化不可缺少的一個系統組件,在這種背景下中心化的配置服務即配置中心應運而生,一個合格的配置中心需要滿足如下特性:

    • 配置項容易讀取和修改
    • 分布式環境下應用配置的可管理性,即提供遠程管理配置的能力
    • 支持對配置的修改的檢視以把控風險
    • 可以查看配置修改的歷史記錄
    • 不同部署環境下應用配置的隔離性
    主流配置中心對比

    目前市面上用的比較多的配置中心有:Spring Cloud Config、Apollo、Nacos和Disconf等。

    由于Disconf不再維護,下面主要對比一下Spring Cloud Config、Apollo和Nacos。

    從配置中心角度來看,性能方面Nacos的讀寫性能最高,Apollo次之,Spring Cloud Config依賴Git場景不適合開放的大規模自動化運維API。

    功能方面Apollo最為完善,nacos具有Apollo大部分配置管理功能,而Spring Cloud Config不帶運維管理界面,需要自行開發。

    Nacos的一大優勢是整合了注冊中心、配置中心功能,部署和操作相比Apollo都要直觀簡單,因此它簡化了架構復雜度,并減輕運維及部署工作。

    綜合來看,Nacos的特點和優勢還是比較明顯的,下面我們一起進入Nacos的世界。

    Nacos配置管理

    發布配置

    首先在nacos發布配置,nacos-restful-consumer服務從nacos讀取配置。

    瀏覽器訪問 http://127.0.0.1:8848/nacos ,打開nacos控制臺,并點擊菜單配置管理->配置列表

    在Nacos添加如下的配置:

    nacos-restful-consumer:

    Namespace: public Data ID: nacos-restful-consumer.yaml Group : DEFAULT_GROUP 配置格式: YAML 配置內容: common:name: application1 config



    獲取配置

    要想從配置中心獲取配置在nacos-restful-consumer工程的pom.xml文件在添加nacos-config的依賴:

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

    在bootstrap.yml添加配置:

    spring:cloud:nacos:config:server-addr: 127.0.0.1:8848 #配置中心地址file-extension: yaml #指定配置文件的擴展名,配置文件名稱根據application.name的名稱加擴展名拼裝,為nacos-restful-consumer.yamlgroup: DEFAULT_GROUP

    注意:要使用配置中心就要在 bootstrap.yml 中來配置,bootstrap.yml配置文件的加載順序要比application.yml要優先。

    在nacos-restful-consumer工程的controller中增加獲取配置的web訪問端點/configs,通過標準的spring @Value方式。

    @Value("${common.name}") private String common_name;@GetMapping(value = "/configs") public String getvalue() {return common_name; }

    基于上面的例子,若要實現配置的動態更新,只需要進行如下改造:

    // 注入配置文件上下文,實現配置的動態更新 @Autowired ConfigurableApplicationContext applicationContext;@GetMapping(value = "/configs") public String getvalue() {String name = applicationContext.getEnvironment().getProperty("common.name");String addr = applicationContext.getEnvironment().getProperty("common.addr");return name + "|" + addr; }

    我們通過nacos控制臺更新common.name的配置值,再次訪問web端點/configs,發現應用程序能夠獲取到最新的配置值,說明spring-cloud-starter-alibaba-nacos-config 支持配置的動態更新。

    注意:可以通過配置 spring.cloud.nacos.config.refresh.enabled=false 來關閉動態刷新

    配置管理模型

    對于Nacos配置管理,通過Namespace、group、Data ID能夠定位到一個配置集。

    配置集(Data ID)

    在系統中,一個配置文件通常就是一個配置集,一個配置集可以包含了系統的各種配置信息,例如,一個配置集可能包含了數據源、線程池、日志級別等配置項。每個配置集都可以定義一個有意義的名稱,就是配置集的ID即Data ID。

    配置項

    配置集中包含的一個個配置內容就是配置項。它代表一個具體的可配置的參數與其值域,通常以 key=value 的形式存在。例如我們常配置系統的日志輸出級別 (logLevel=INFO|WARN|ERROR) 就是一個配置項。

    配置分組(Group)

    配置分組是對配置集進行分組,通過一個有意義的字符串(如 Buy 或 Trade )來表示,不同的配置分組下可以有相同的配置集(Data ID)。

    當您在 Nacos 上創建一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱默認采用 DEFAULT_GROUP 。

    配置分組的常見場景:可用于區分不同的項目或應用,例如:學生管理系統的配置集可以定義一個group為:STUDENT_GROUP。

    命名空間(Namespace)

    命名空間(namespace)可用于進行不同環境的配置隔離。例如可以隔離開發環境、測試環境和生產環境,因為它們的配置可能各不相同,或者是隔離不同的用戶,不同的開發人員使用同一個nacos管理各自的配置,可通過namespace隔離。不同的命名空間下,可以存在相同名稱的配置分組(Group) 或 配置集。

    最佳實踐

    Nacos抽象定義了Namespace、Group、Data ID的概念,具體這幾個概念代表什么,取決于我們把它們看成什么,這里推薦給大家一種用法,如下圖:

    • Namespace:代表不同環境,如開發、測試、生產環境。
    • Group:代表某項目,如XX醫療項目、XX電商項目
    • DataId:每個項目下往往有若干個工程,每個配置集(DataId)是一個工程的主配置文件

    獲取某配置集的代碼

    獲取配置集需要指定:

    1、nacos服務地址,必須指定

    2、namespace,如不指定默認public,在config中指定namespace,例子如下:

    config:server‐addr: 127.0.0.1:8848 # 配置中心地址file‐extension: yamlnamespace: a1f8e863‐3117‐48c4‐9dd3‐e9ddc2af90a8 # 開發環境group: DEFAULT_GROUP # xx業務組

    3、group,如不指定默認 DEFAULT_GROUP,見上邊第2點的例子。

    4、dataId,必須指定,名稱為應用名稱+配置文件擴展名

    自定義擴展的 Data Id 配置

    ext-config擴展配置

    Spring Cloud Alibaba Nacos Config可支持自定義 Data Id 的配置。 一個完整的配置案例如下所示:

    spring:application:name: nacos-restful-consumer #服務名cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #服務發現中心地址#namespace: f5eec3c1-4f05-40cd-964a-c8d44f342ab4 #指定命名空間的idconfig:server-addr: 127.0.0.1:8848 #配置中心地址file-extension: yaml #指定配置文件的擴展名,配置文件名稱根據application.name的名稱加擴展名拼裝,為nacos-restful-consumer.yamlgroup: DEFAULT_GROUP#cluster-name: DEFAULT# config external configuration# 1、Data Id group:組名,refresh:動態刷新ext-config[0]:data-id: ext-config-common01.yamlgroup: COMMON_GROUPrefresh: trueext-config[1]:data-id: ext-config-common02.yamlgroup: COMMON_GROUPrefresh: trueext-config[2]:data-id: ext-config-http.yamlgroup: COMMON_GROUPrefresh: true

    可以看到:

    • 通過 spring.cloud.nacos.config.ext-config[n].data-id 的配置方式來支持多個 Data Id 的配置。
    • 通過 spring.cloud.nacos.config.ext-config[n].group 的配置方式自定義 Data Id 所在的組,不明確配置的話,默認是 DEFAULT_GROUP。
    • 通過 spring.cloud.nacos.config.ext-config[n].refresh 的配置方式來控制該 Data Id 在配置變更時,是否支持應用中可動態刷新, 感知到最新的配置值。默認是不支持的。
    注意

    spring.cloud.nacos.config.ext-config[n].data-id 的值必須帶文件擴展名,文件擴展名既可支持properties,又可以支持 yaml/yml。

    此時 spring.cloud.nacos.config.file-extension 的配置對自定義擴展配置的 Data Id 文件擴展名沒有影響。

    測試

    配置ext-config-common01.yaml:

    配置ext-config-common02.yaml:

    編寫測試代碼:

    @GetMapping(value = "/configs") public String getvalue1() {String name = applicationContext.getEnvironment().getProperty("common.name");String addr = applicationContext.getEnvironment().getProperty("common.addr");return name + "|" + addr; }

    重啟nacos-restful-consumer工程

    訪問:http://127.0.0.1:56020/configs

    通過測試發現:

    擴展配置優先級是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,優先級越高。

    通過內部相關規則(應用名、擴展名 )自動生成相關的 Data Id 配置的優先級最大。

    案例

    案例需求如下:

    1、抽取servlet公用的配置到獨立的配置文件ext-config-http.yaml中,配置文件內容如下:

    #HTTP格式配置 spring:http:encoding:charset: utf-8force: trueenabled: truemessages:encoding: UTF-8 #tomcat頭信息和訪問路徑配置 server:tomcat:remote-ip-header: x-forwarded-forprotocol-header: x-forwarded-protoservlet:context-path: /ause-forward-headers: true

    2、如果有context-path的個性配置可以單獨設置

    實現如下:

    1、抽取servlet公用的配置到獨立的配置文件

    在nacos-restful-consumer中添加擴展配置文件,下圖中紅色框內為指定的配置文件名稱

    在nacos中添加擴展配置文件,下圖中紅色框內是servlet公用的配置內容。

    發布配置,重啟nacos-restful-consumer

    訪問http://127.0.0.1:56020/a/configs驗證配置是否生效

    2、如果有context-path的個性配置可以單獨設置

    這里我們需要對 nacos-restful-consumer的context-path 設置為根路徑,如何實現?

    方案1:修改 ext-config-http.yaml中context-path 為根路徑,但是此文件定義為公用配置文件,其它服務可使用了,此方案不可行。

    方案2:在nacos-restful-consumer.yaml中定義context-path為根路徑,因為nacos-restful-consumer.yaml單獨屬于nacos-restful-consumer工程,且nacos-restful-consumer.yaml的優先級比ext-config-http.yaml高,所以此方案可行。

    在nacos中配置nacos-restful-consumer.yaml,如下:

    重啟nacos-restful-consumer工程。

    測試,請求:http://127.0.0.1:56020/configs

    總結

    Nacos用來干什么?

    ??????Nacos是阿里巴巴公司開源的項目,它用來實現配置中心和服務注冊中心。

    什么是服務發現?

    ??????在微服務架構中一個業務流程需要多個微服務通過網絡接口調用完成業務處理,服務消費方從服務注冊中心獲取服務提供方的地址,從而進行遠程調用,這個過程叫做服務發現。

    服務發現的流程是什么?
  • 服務發現的客戶端從服務注冊中心獲取服務列表
  • 服務消費方通過客戶端負載均衡獲取服務實例地址,進行遠程調用。
  • 什么是配置中心?

    ??????在微服務架構中為了統一管理各各微服務的配置信息專門設置配置中心,配置中心就是一種統一管理各種應用配置的基礎服務組件。

    配置中心的應用流程是什么?
  • 發布配置,將配置信息發布到配置中心。
  • 獲取配置,配置中心客戶端得到配置中心的通知,從配置中心獲取配置。
  • Spring Cloud是什么?

    ??????Spring Cloud是一套微服務開發框架集合,包括微服務開發的方方頁面,Spring Cloud是一套微服務開發的標準,集成了很多優秀的開源框架,比如有名的Netflix公司的眾多項目。

    Spring Cloud Alibaba是什么?

    ??????Spring Cloud Alibaba是阿里巴巴公司基于Spring Cloud標準實現一套微服務開發框架集合,它和Netflix一樣都是Spring Cloud微服務開發實現方案。

    Dubbo服務開發流程是什么?
    1、定義api工程。

    ??????方便其它服務原來api工程,遠程調用dubbo服務。

    2、定義api實現工程。

    ??????service實現類使用 @org.apache.dubbo.config.annotation.Service注解標記為dubbo服務。

    3、服務消費方開發

    ??????引入api工程依賴,使用org.apache.dubbo.config.annotation.Reference注解注入service,發起遠程調用

    代碼倉庫

    總結

    以上是生活随笔為你收集整理的闪聚支付-第1章-Nacos-服务发现与配置管理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    欧美黑人性猛交 | 久久情侣偷拍 | 一区二区三区动漫 | 在线看av的网址 | 日韩精品久久中文字幕 | 黄色av电影免费观看 | 亚州中文av | 欧美aaa级片| 三级黄色理论片 | 黄色一级在线免费观看 | 亚洲国产中文字幕在线观看 | 久久久久高清毛片一级 | 久久久久久久毛片 | 日本精品视频免费观看 | 国产一区在线观看免费 | 色欧美综合 | 91免费观看视频在线 | 亚洲精品久久久久中文字幕二区 | 国产小视频在线免费观看视频 | 18做爰免费视频网站 | 夜夜躁日日躁狠狠躁 | 久久国产一区二区 | av看片网 | 91麻豆精品久久久久久 | 网站免费黄色 | 欧美精品亚州精品 | 久久国产经典视频 | 色综合久久久久 | 蜜臀av夜夜澡人人爽人人桃色 | 国产午夜精品久久 | 精品一区 精品二区 | 欧美伦理电影一区二区 | 97国产在线播放 | 日本激情动作片免费看 | 97在线视频观看 | 国产精品一区免费在线观看 | 天天爽天天射 | 国产在线一区观看 | 激情久久久久久久久久久久久久久久 | 日韩一级电影在线观看 | 国产无遮挡猛进猛出免费软件 | 九精品 | 五月天亚洲婷婷 | 国产不卡一二三区 | 国产精品久久婷婷六月丁香 | 日日操日日插 | 婷婷免费在线视频 | 国产对白av | 91片网 | 久热久草在线 | 日韩精品视频免费在线观看 | 国产精品国产三级国产 | 在线有码中文 | 国产不卡一| 亚洲人片在线观看 | 中文字幕 欧美性 | 狠狠躁夜夜躁人人爽视频 | 天天干天天操天天入 | 久草在线一免费新视频 | 免费av看片 | 亚洲精品视频在线观看免费视频 | 久久婷综合 | 99精品在线免费观看 | 久草电影网| 黄www在线观看 | 午夜在线日韩 | 久久精品99精品国产香蕉 | 蜜桃视频色 | 色综合色综合色综合 | 77国产精品 | 在线观看韩日电影免费 | 国产裸体bbb视频 | 亚洲精品五月 | 日韩av电影手机在线观看 | 久久综合久久综合这里只有精品 | 成人在线免费视频 | 深夜免费小视频 | 国产日本在线观看 | 精品久久一区二区 | 一本一本久久aa综合精品 | 四虎在线观看 | 一区在线播放 | 国偷自产视频一区二区久 | 午夜色场 | 国产视频一二三 | 中文字幕免费国产精品 | 91精品视频免费看 | 婷婷在线播放 | 亚洲精品国产高清 | 日韩一级黄色大片 | 日韩有码第一页 | 日韩最新av在线 | 91九色性视频 | 午夜精品久久久久久久久久久 | 精品一区二区日韩 | 久久好看免费视频 | 日韩特黄av| 91大神dom调教在线观看 | 国产在线观看不卡 | 最新午夜电影 | 国产成人一区二区三区影院在线 | 99久久精品久久亚洲精品 | 日本女人b| 天天射综合网站 | 国产99免费 | 欧美午夜久久久 | www夜夜操com | 国产精品少妇 | 日本中文字幕在线看 | 国产一线二线三线在线观看 | 在线观看中文字幕一区 | 久久成人资源 | 玖玖精品在线 | 国产美女无遮挡永久免费 | 亚洲精品在线观 | 久久国内免费视频 | 久久久久久久网站 | 免费在线视频一区二区 | 国产尤物视频在线 | 精品999 | 最近中文字幕免费大全 | 国产99区| 日韩一级黄色av | 热re99久久精品国产66热 | 久久久精品在线观看 | 国产精品久免费的黄网站 | 91精品国产乱码久久桃 | www.天堂av | 久久久国产精华液 | 久久精品高清 | 蜜桃av久久久亚洲精品 | 日韩免费一区二区在线观看 | 国产亚洲精品美女 | 伊人久久一区 | 日韩欧美在线综合网 | av官网在线 | 亚洲一区二区视频在线 | 中文字幕高清免费日韩视频在线 | 最近中文字幕国语免费av | 人人干,人人爽 | 一级黄色免费 | 美女黄网久久 | 免费h精品视频在线播放 | 亚洲国产精品va在线看黑人 | 中文字幕视频在线播放 | 黄色av网站在线免费观看 | 国际精品久久久 | 香蕉视频在线免费 | 免费能看的av | 热久久精品在线 | 久久久久亚洲天堂 | 麻豆视频在线免费 | 日日干天天爽 | 国产综合片 | 天天操天天色天天 | 91精品在线观看视频 | 日本性高潮视频 | 国产精品久久久久久久久久久免费 | 久久久亚洲影院 | www激情com | 黄色一级影院 | 国产很黄很色的视频 | 午夜.dj高清免费观看视频 | 最新av在线播放 | 国内免费的中文字幕 | 激情在线网址 | 久久女同性恋中文字幕 | 天天色天天射天天干 | 在线天堂中文www视软件 | 午夜影视av | 美女网站色 | 亚洲少妇天堂 | 韩国一区二区在线观看 | 免费在线观看一级片 | 亚洲激情在线观看 | 亚洲精品午夜国产va久久成人 | 色噜噜日韩精品一区二区三区视频 | 看国产黄色大片 | 国产高清绿奴videos | 最新av网址大全 | 亚洲欧美在线视频免费 | 涩涩资源网 | 久久久久女教师免费一区 | 免费进去里的视频 | 91桃色国产在线播放 | 奇米影视777影音先锋 | 久久少妇免费视频 | 亚洲一区二区精品在线 | 国产精品久久久久久久av电影 | 亚洲免费视频在线观看 | 色噜噜日韩精品一区二区三区视频 | 一区二区精品在线 | 97干com | 免费观看9x视频网站在线观看 | 欧美va日韩va | 色妞色视频一区二区三区四区 | 午夜精品一区二区三区在线观看 | 天天玩天天干天天操 | 一区二区 不卡 | 九九九视频在线 | 一区二区国产精品 | 色网免费观看 | 日韩爱爱片 | 日韩在线观看高清 | 91欧美在线| 波多野结衣小视频 | 人人操日日干 | 免费97视频 | 九九免费在线观看 | 国产激情免费 | 91看片成人| av大全在线看 | 亚洲丝袜一区二区 | 99热这里有 | 99久精品 | 免费精品国产 | 超碰个人在线 | 9在线观看免费高清完整 | 成人久久久久 | 91av视频网| 色婷婷国产在线 | 69精品视频在线观看 | 国产精品免费不 | 日韩综合第一页 | 久草在线免费在线观看 | 久久久久国产精品视频 | 在线免费观看视频你懂的 | 天天射天天爱天天干 | av观看网站 | 黄色毛片在线看 | 精品免费视频123区 午夜久久成人 | 五月天久久精品 | 国产精品99久久久久人中文网介绍 | 日日夜夜精品网站 | 成人a在线观看 | 婷婷综合影院 | 久久草网 | 激情综合网五月婷婷 | 亚州天堂| 1000部18岁以下禁看视频 | 国产91免费观看 | 亚洲激情国产精品 | 九九免费在线看完整版 | www.天天色.com | 四虎在线观看精品视频 | 99久久国产免费免费 | 国产毛片在线 | 日韩精品一区在线播放 | 国产va在线观看免费 | 免费的黄色的网站 | 国产尤物一区二区三区 | 探花视频免费观看高清视频 | 丁香激情五月婷婷 | 麻豆视屏 | 精品国产一区二 | 99久久www| 国精产品999国精产 久久久久 | 日本精品一区二区三区在线观看 | 久久久亚洲国产精品麻豆综合天堂 | 人人干,人人爽 | 日本中文字幕网站 | 欧美aaa大片 | 玖玖玖在线 | 婷婷久久丁香 | 四虎成人精品永久免费av | 久久国产精品免费视频 | 国产一区二区精品 | 91香蕉视频色版 | 一区中文字幕在线观看 | 国外成人在线视频网站 | 国产不卡在线播放 | 日韩久久激情 | 亚洲一区二区视频在线 | 最新精品国产 | 91热爆视频 | 黄色在线观看免费网站 | 中文不卡视频 | 人人爽人人爽av | 91av视频| 国产精品麻豆91 | 亚洲男人天堂a | 国产在线a | 999久久 | 一级黄色网址 | 精品国产三级 | 99精品福利视频 | 国产涩涩在线观看 | 精品亚洲视频在线 | 天天操网| 视频在线精品 | 在线观看免费国产小视频 | 手机看国产毛片 | 国产不卡在线 | 久久国产品 | 国产一区二区精品久久91 | 中文字幕亚洲五码 | 色吊丝在线永久观看最新版本 | 免费av大片 | 国产精品人人做人人爽人人添 | 免费在线观看午夜视频 | 网站你懂的 | 夜夜爽天天爽 | 亚洲最新在线视频 | 欧美日韩精品在线观看视频 | 日韩性xxx| 久久99精品国产91久久来源 | 中文乱幕日产无线码1区 | 狠狠躁日日躁狂躁夜夜躁av | 成人免费观看大片 | 亚洲国产丝袜在线观看 | 又黄又刺激的网站 | 狠狠艹夜夜干 | 色综合久久66 | 欧美一级视频免费 | 精品久久久成人 | 亚洲一区日韩在线 | 亚洲免费黄色 | 国产精品免费久久 | 国产精品精品久久久 | 色综合久久久 | 亚洲天堂网视频 | 521色香蕉网站在线观看 | 91视频免费播放 | 日b视频国产 | 玖草在线观看 | 99爱国产精品 | av免费在线观 | 亚洲精选国产 | 欧美影片 | 亚洲一二三久久 | 国产一区二区精品 | 国产免费美女 | 亚洲国产丝袜在线观看 | 国产精品99免视看9 国产精品毛片一区视频 | 国产精品嫩草影院9 | 日韩av高清| av电影在线播放 | 国产精品久久亚洲 | 欧美一级电影免费观看 | 亚洲精品资源在线 | 成年人在线视频观看 | 久久国产区| 99免费在线播放99久久免费 | 久草网在线观看 | 一级α片免费看 | 日韩在线播放欧美字幕 | 欧美日韩在线观看一区二区 | 婷婷精品国产欧美精品亚洲人人爽 | 国产精品视频永久免费播放 | 大胆欧美gogo免费视频一二区 | 91最新网址在线观看 | 亚洲黄色在线免费观看 | 午夜神马福利 | 国产日韩精品一区二区在线观看播放 | 中文字幕亚洲高清 | 99久久99视频只有精品 | 国产人免费人成免费视频 | 日产中文字幕 | 狠狠色狠狠色 | 一区二区不卡视频在线观看 | 国产免费午夜 | 国产香蕉视频 | 一区二区视频在线免费观看 | 午夜av免费在线观看 | 精品久久久久亚洲 | 久久精品视频免费观看 | 欧美日韩视频在线观看免费 | 91香蕉视频色版 | 99夜色| 国产色一区 | 亚洲高清视频在线观看 | 精品视频免费在线 | 93久久精品日日躁夜夜躁欧美 | 97超碰站| www.com久久 | 91在线视频在线观看 | 久草视频资源 | 久久高清国产视频 | 国产精品va在线观看入 | 亚洲成年人av | 久草在线视频首页 | 免费国产一区二区 | 国产精品免费一区二区三区在线观看 | 国产精品一区在线观看你懂的 | 亚洲婷久久 | 在线观看完整版免费 | 人人看人人 | 亚洲日本一区二区在线 | 中文字幕永久 | 日免费视频 | 中文视频在线看 | 一区二区三区福利 | 色婷婷啪啪免费在线电影观看 | 91在线精品视频 | 久久精品国产免费观看 | 国产精品嫩草影院9 | 91日韩免费| 国产亚洲成人网 | 99久久99视频只有精品 | 亚洲精品久久视频 | 青草视频在线 | 中国一级片在线播放 | 午夜精品成人一区二区三区 | 欧美99热| 日韩高清av| 国产精品片 | 欧美另类人妖 | 亚洲精品国产品国语在线 | 久久精品一区二区三区四区 | 免费中文字幕在线观看 | 欧美 日韩 国产 中文字幕 | 国产美女网站视频 | 九九免费精品视频 | 美女av在线免费 | 成人免费影院 | av在线精品 | 九九精品在线观看 | 亚洲综合成人在线 | 99久久99视频 | 毛片区 | 久久美女电影 | 五月婷婷久久丁香 | 国产高清在线a视频大全 | 久久综合九色综合久久久精品综合 | 麻豆精品传媒视频 | 国产一级精品视频 | wwwwww国产| av黄色成人| 亚洲无吗天堂 | 香蕉视频在线免费 | 九九涩涩av台湾日本热热 | 在线观看免费国产小视频 | 欧美日本在线观看视频 | 亚洲午夜av电影 | 天天操福利视频 | 国产一区二区观看 | 欧美一区,二区 | 国产日韩精品欧美 | 超碰在线成人 | 一级性视频 | 国产一区二区三区免费观看视频 | 国产中文字幕在线 | 精品久久福利 | 日韩电影在线一区二区 | 欧美 另类 交 | 一区二区三区四区影院 | 狠狠激情中文字幕 | 丁香六月综合网 | 香蕉视频在线免费 | 麻花传媒mv免费观看 | 黄p在线播放 | 天天爱天天操天天射 | 国产大陆亚洲精品国产 | 91精品婷婷国产综合久久蝌蚪 | 中文字幕 国产专区 | 一区二区三区动漫 | 亚洲精品456在线播放第一页 | 伊人亚洲综合网 | 久久精品日韩 | 欧美污在线观看 | 色婷婷综合在线 | 亚洲精品国产麻豆 | 国产一区二区不卡视频 | 99操视频 | 久久亚洲欧美日韩精品专区 | 久久免费视频3 | 一级特黄av | 久久久久久激情 | 视频成人| 超碰av在线播放 | 欧美天堂影院 | 狠狠干激情 | 免费黄色网址大全 | 久久综合狠狠综合久久狠狠色综合 | 午夜精品福利一区二区三区蜜桃 | www五月 | 中文字幕高清视频 | 岛国精品一区二区 | 亚洲国产中文在线 | 俺要去色综合狠狠 | 精品久久一区二区三区 | 69国产盗摄一区二区三区五区 | 成人网在线免费视频 | 午夜视频免费在线观看 | 青青草在久久免费久久免费 | 91九色最新 | 欧美另类xxxx | 97在线免费视频观看 | 2024国产精品视频 | 综合色伊人 | 亚洲国产精品传媒在线观看 | 狠狠干综合 | 亚洲黄色小说网址 | 久热久草| 九九精品视频在线观看 | 亚洲婷婷在线 | 日韩免费在线看 | 欧美日韩xx | 最近免费在线观看 | 亚洲 欧洲 国产 日本 综合 | 在线天堂亚洲 | 免费看一级特黄a大片 | 日韩在线视频免费观看 | 成人中文字幕在线观看 | 色免费在线 | 亚洲精品美女视频 | 国产精品24小时在线观看 | 日韩电影一区二区三区 | 天操夜夜操| 久久中文精品视频 | 中文字幕三区 | 在线免费观看黄色小说 | 成人福利av | 色婷婷av一区 | 成年人精品 | 亚洲色影爱久久精品 | 国产精品免费一区二区三区在线观看 | 日韩av一区二区三区四区 | 五月天婷婷视频 | 国产精品一区二区久久精品爱涩 | 婷婷精品国产一区二区三区日韩 | 国产精品久久久久久久7电影 | 久久福利剧场 | 91精品导航| 天天插天天干天天操 | 日韩精品一区在线观看 | 成人精品久久久 | 亚洲人成精品久久久久 | 国产伦理一区二区三区 | 日韩精品一区二区三区在线视频 | 日韩精品一区电影 | 日本aaaa级毛片在线看 | 91污污视频在线观看 | 99tvdz@gmail.com | 激情五月视频 | 人人插人人草 | www久久久久 | 麻花传媒mv免费观看 | 国产电影一区二区三区四区 | 97中文字幕 | 视频二区在线 | 天天综合网在线观看 | 免费观看高清 | 免费高清在线观看电视网站 | 欧美日韩精品网站 | 亚洲国内精品在线 | 国产婷婷精品av在线 | 亚洲国产日韩一区 | 久久精品影片 | 久久y| 高清国产午夜精品久久久久久 | 国产精品久久久久久麻豆一区 | 狠狠网站| 国产欧美日韩一区 | 国产日韩视频在线播放 | 亚洲精品9 | 日本精品在线看 | 国产黄色片一级 | 色婷婷av国产精品 | 日本精品久久久久 | 欧美性极品xxxx做受 | 日韩国产精品久久久久久亚洲 | 97在线观看免费高清 | 天天色天天操综合网 | 欧美成人xxx | 国产日韩精品在线观看 | 九九免费精品 | 国产伦理一区 | 美女视频久久黄 | 国产精品久久精品 | 日韩免费在线 | 99久久日韩精品视频免费在线观看 | 丝袜美腿在线播放 | 精品久久一| 成人性生交大片免费看中文网站 | 亚洲综合视频在线 | 麻豆视频国产 | 性日韩欧美在线视频 | 亚洲黄色免费观看 | 欧美日韩国产在线观看 | 亚洲精品国久久99热 | 色中射| 欧美日韩二三区 | 中文字幕成人网 | 99精品视频在线观看播放 | 三上悠亚一区二区在线观看 | 成人免费看电影 | 日日夜夜中文字幕 | 香蕉久草 | 日韩欧美一区二区三区视频 | 亚洲无吗视频在线 | 亚洲成人av片在线观看 | 久久不射网站 | 四虎永久免费网站 | 日本精品一区二区在线观看 | 日韩电影精品 | 欧美一级久久久 | 九色视频网 | 亚洲做受高潮欧美裸体 | 亚洲极色 | 成人动漫一区二区三区 | 天天操天天射天天爱 | 在线激情网 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 黄色视屏av | av网在线观看| 在线免费av观看 | 久久精品99国产精品酒店日本 | 久人人| 国产91精品一区二区麻豆网站 | 日韩av网页 | 国产精品久久久久久久久费观看 | 亚洲综合激情五月 | 久香蕉| 久草在线电影网 | 成人羞羞视频在线观看免费 | 91精品国产三级a在线观看 | 欧美伦理电影一区二区 | 99电影456麻豆 | 久久精品久久久精品美女 | 亚洲一一在线 | 天天色天天射综合网 | 国产精品永久免费 | 97综合在线| 天天干夜夜操视频 | 久久看毛片 | 日韩成人精品在线观看 | av电影在线观看完整版一区二区 | 日韩精品久久久久久久电影竹菊 | 久二影院| 亚洲一区精品二人人爽久久 | 国产精久久久久久久 | 成人亚洲精品国产www | 亚洲在线网址 | 久久精品国产一区二区三 | 亚洲精品国产精品国自产观看 | 91久色蝌蚪 | 96精品高清视频在线观看软件特色 | 国产精品成人a免费观看 | 欧美综合在线观看 | 国产精品你懂的在线观看 | 66av99精品福利视频在线 | 国产精品久久久久久久久毛片 | 天天综合网国产 | 国内综合精品午夜久久资源 | 国产中文字幕久久 | 国产视频亚洲 | 黄色一级在线视频 | 伊人亚洲精品 | 日韩精品欧美专区 | 成 人 黄 色 免费播放 | 午夜精品久久久久久久99无限制 | 最近日本字幕mv免费观看在线 | 久久精品影视 | 97精品国产一二三产区 | 狂野欧美激情性xxxx欧美 | 日本黄色大片免费看 | 国产视频18| 日韩高清免费在线 | 精品美女久久久久久免费 | 国产在线无 | 97精品视频在线播放 | 免费h精品视频在线播放 | 日韩r级电影在线观看 | 综合精品久久久 | 一区二区日韩av | 一本一本久久a久久精品综合小说 | 五月天高清欧美mv | 欧美日韩高清一区二区 | 国产精品毛片久久 | 九九九九精品 | 日韩高清片 | 国产精品大尺度 | 亚洲国产精品999 | 亚洲成人av电影在线 | 国产精品丝袜 | 人人草网站 | www免费看| 中文字幕av在线免费 | 午夜视频不卡 | 欧美日韩一区二区免费在线观看 | 99色在线观看视频 | 亚洲aⅴ久久精品 | 在线成人免费av | 欧美国产不卡 | 亚洲区另类春色综合小说校园片 | 99久久精品国产一区二区成人 | 91成熟丰满女人少妇 | 欧美精品久久久久久久久久丰满 | 久久精品网址 | a视频免费看 | 久久伊人八月婷婷综合激情 | 亚洲精品久久久蜜臀下载官网 | 免费观看版| 91成人免费看片 | 国模视频一区二区 | 国产成人精品一区二区三区在线 | 亚洲一区日韩精品 | 精品国产免费av | 日b视频国产 | 亚洲视频资源在线 | 免费91麻豆精品国产自产在线观看 | 日韩免费大片 | 精品福利视频在线 | 久久综合九色综合97婷婷女人 | 成人wwwxxx视频 | 狠狠的干狠狠的操 | 国内视频在线观看 | 亚洲精品久久久蜜桃直播 | 在线观看免费视频你懂的 | 国产一区二区三区四区在线 | 精品在线观看一区二区三区 | 免费视频在线观看网站 | 久久久久成| 国产在线a视频 | 久久无码av一区二区三区电影网 | 久久综合欧美精品亚洲一区 | 亚洲伊人天堂 | 成人免费视频免费观看 | 日韩精品不卡 | 国产精品永久 | 日韩欧美区| 亚洲四虎 | 久久成人免费 | 99国内精品久久久久久久 | 国产精品区免费视频 | 视频直播国产精品 | 四虎成人网 | 国产剧情一区二区在线观看 | 麻豆综合网 | 欧美在线观看视频一区二区 | 日本公乱妇视频 | 国产成人精品一区二区三区在线 | 麻豆视频免费 | 中文字幕字幕中文 | 日日操操操 | www.狠狠| 日本久久成人 | 国内精品久久影院 | 黄网站免费大全入口 | 色诱亚洲精品久久久久久 | 高清av影院 | 久久99爱视频 | 99久久精品无码一区二区毛片 | 色网站中文字幕 | 久久dvd | 91少妇精拍在线播放 | 中文字幕在线视频一区二区三区 | 日本黄色片一区二区 | jizz18欧美18| 国产很黄很色的视频 | 国产最新91| 久久成人麻豆午夜电影 | 天天干天天插伊人网 | 在线电影播放 | 久久精品人人做人人综合老师 | 日韩中文免费视频 | 97精品超碰一区二区三区 | 久久精品亚洲一区二区三区观看模式 | www.黄色网.com | 五月天中文在线 | 日韩高清免费在线 | 日韩69av| 超碰在线免费福利 | 五月激情六月丁香 | 九九99靖品 | 天天干天天拍天天操天天拍 | 亚洲欧美日韩一区二区三区在线观看 | 成人黄色免费在线观看 | 亚洲日韩中文字幕 | 国产精品久久久久久久午夜 | 国产成人在线网站 | 久久久久久99精品 | 欧美日韩精品电影 | 在线观看视频你懂的 | 亚洲精品免费在线观看视频 | av三级在线免费观看 | 999视频网站 | 亚洲国产美女精品久久久久∴ | 波多野结依在线观看 | 成人久久18免费网站麻豆 | 五月婷婷久草 | 麻豆精品视频在线观看免费 | 亚洲一级在线观看 | 精品麻豆入口免费 | 成片免费观看视频 | 在线看片中文字幕 | 伊人激情综合 | 亚洲精品国偷拍自产在线观看蜜桃 | 一区二区三区高清 | 国产综合在线观看视频 | 在线观看小视频 | 日韩精品无码一区二区三区 | 欧美精品午夜 | 欧美色伊人| 亚洲精品大全 | 四虎在线观看视频 | 亚洲色图激情文学 | 亚洲乱码精品久久久久 | 欧美久久久一区二区三区 | 开心婷婷色 | 亚洲精品国产精品国自产 | 亚洲第一区在线观看 | 香蕉在线影院 | 成人羞羞免费 | 欧美成人猛片 | 国产精品久久久久久久久久直播 | 69av视频在线观看 | 欧美成人aa | 日韩高清免费无专码区 | 五月天中文字幕mv在线 | 九九热99视频 | 天天射综合网站 | 久久久免费毛片 | 国产精品入口麻豆www | 国产综合小视频 | 国产91亚洲精品 | 97超碰网 | 国产在线观看免费 | 性色av香蕉一区二区 | 成人免费观看完整版电影 | 91成年视频| 在线看成人 | 高清av免费观看 | 久久99久久99精品免观看粉嫩 | 麻豆久久精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人毛片100免费观看 | 亚洲国产中文字幕在线 | 天天操天天爽天天干 | avcom在线 | 欧美乱淫视频 | 国产视频在 | 久久看毛片 | 国产日韩一区在线 | 久久久久久久久久久电影 | 久久96国产精品久久99软件 | 免费在线黄色av | 日韩精品一区二区电影 | 日本超碰在线 | 日韩在线视频观看免费 | 国产日韩精品在线观看 | 国产欧美高清 | 日韩精品一区二区三区水蜜桃 | 狠狠色丁香久久婷婷综 | 国产免费观看久久黄 | 成人免费共享视频 | 人人爽人人插 | 97在线资源| 午夜久久久久久久 | 久久桃花网 | 四虎在线视频免费观看 | 国产高清在线视频 | 狠狠网站 | 人人爱爱| 天天插天天干 | 人人射人人 | 国产一二三四在线视频 | 国产精品99久久久 | 91精品国产综合久久福利 | 九九久久影院 | 欧美日韩一区二区三区在线免费观看 | 国内免费久久久久久久久久久 | 激情一区二区三区欧美 | 私人av| 最近在线中文字幕 | 日本精品中文字幕在线观看 | 欧美激精品 | 午夜精品久久久久久中宇69 | 夜夜骑天天操 | 亚洲欧美国产日韩在线观看 | 亚洲砖区区免费 | 天天操天| 九九在线精品视频 | 免费看特级毛片 | 日韩性xxxx | 日韩一区二区三区在线看 | 色a综合| 精品久久1 | 高清国产一区 | 国产免费一区二区三区最新 | 美女网站色在线观看 | 国产精品系列在线 | 五月婷婷六月丁香激情 | 很黄很色很污的网站 | 99免费在线观看 | 日韩va在线观看 | 亚洲精品videossex少妇 | 久久伊人热 | 久久久免费在线观看 | 国产精品久久久久久久久久久久久久 | 91香蕉视频黄色 | 在线高清 | 精品国产乱码久久久久 | 免费在线a | 亚洲三级黄色 | 久久午夜剧场 | 欧美日韩高清一区二区 国产亚洲免费看 | 99热国产在线中文 | 国产玖玖在线 | 日韩精品在线观看视频 | 国产玖玖在线 | .国产精品成人自产拍在线观看6 | 国产丝袜高跟 | www色| 激情伊人五月天 | 97色狠狠 | 久久久蜜桃一区二区 | 日韩欧美一区二区三区在线观看 | 国产成人99久久亚洲综合精品 | 国产午夜精品免费一区二区三区视频 | 免费国产亚洲视频 | www.超碰97.com | 国产高清免费在线播放 | 久久韩国免费视频 | 成人欧美亚洲 | 在线播放视频一区 | 欧美日韩不卡一区二区三区 | 人人玩人人爽 | 在线观看中文字幕第一页 | 欧美另类巨大 | 国产精品免费久久久 | 国产精品99久久久久久久久久久久 | 国产护士av| 美女网站视频免费黄 | 91精品国产99久久久久久红楼 | 久久曰视频 | 欧美日韩视频精品 | av黄色大片 | 午夜成人影视 | 亚洲最大的av网站 | 国产色婷婷 | 久久草草热国产精品直播 | 免费黄色网止 | 在线观看a视频 | 欧美午夜视频在线 | 欧美另类xxxxx| 国产韩国精品一区二区三区 | 久久精品资源 | 日韩在线观看视频网站 | 亚洲精品资源在线 | 制服丝袜天堂 | 日本公妇在线观看高清 | 久草爱| 亚洲人av免费网站 | 成人日批视频 | 国产九九九精品视频 | 色婷婷综合久久久久 | 亚洲精品国产精品国自 | 亚洲精品免费看 | 亚洲综合小说电影qvod | 亚洲精品美女久久久久网站 | 久久99国产精品久久99 | 亚洲精品乱码久久久一二三 | 天堂在线视频中文网 | 在线免费观看国产视频 | 色爽网站 | 一区av在线播放 | 丁香av | 99视频精品 | 免费在线观看av网站 | 干 操 插 | 亚洲免费av观看 | 91九色精品国产 | 中文字幕乱码电影 | 91精品久久久久久综合五月天 | 日韩精选在线观看 | 欧美午夜性生活 | 香蕉视频在线播放 | 97在线观看视频国产 | 亚洲色图激情文学 | 激情一区二区三区欧美 | 欧美日韩精品在线一区二区 | 97操碰| 亚洲精品久久久久久国 | 免费人人干 | 91精品视频观看 | 五月天激情开心 | 99爱精品在线 | 日韩欧美一区二区在线观看 | 成人激情开心网 | 在线看片91 | 精品国产区在线 | 99在线热播 | 日韩高清免费电影 | 亚洲欧洲一区二区在线观看 | 91在线看视频 | 欧美日韩精品在线观看 | 中文字幕高清在线播放 | 黄色毛片视频免费观看中文 | 免费在线观看日韩欧美 | 日韩精品偷拍 | 成年人免费观看在线视频 | 欧美日韩不卡一区二区 | 国产中文字幕在线视频 | 国产成人精品久 | 黄色影院在线免费观看 | 亚洲精品无 |