<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      Fork me on GitHub

      Spring Cloud Alibaba系列之分布式服務組件Dubbo

      本博客的例子代碼可以在github找到下載鏈接:代碼下載

      SpringBoot、SpringCloud Alibaba系列博客專欄:鏈接

      1、分布式理論

      1.1、分布式基本定義

      《分布式系統原理與范型》定義:
      “分布式系統是若干獨立計算機的集合,這些計算機對于用戶來說就像單個相關系統”
      分布式系統(distributed system)是建立在網絡之上的軟件系統。

      1.2、架構發展演變

      架構的發展是由最初的單一應用架構構建的,一般就是ORM框架方便數據庫操作。

      不過隨著系統越來越復雜,單一應用架構會變得難以維護,所以架構逐漸演變出了垂直應用架構,所謂垂直應用架構其實就是安裝業務模板進行拆分,比如可以安裝業務將一個電商系統分為訂單模塊,用戶信息管理模塊,商品管理模塊等等,這時候MVC框架就派上用場,MVC框架可以協助系統更好的按業務拆分,不過業務拆分后雖然是比單一應用架構更好維護了。

      不過隨著系統越來約復雜,發現很多共用的模塊很難復用起來,這時候分布式服務架構登場了,分布式架構是將一些核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,當應用需要時,就去服務中心調服務就可以,而實現這種服務注冊的肯定是RPC框架了。

      當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基于訪問壓力實時管理集群容量,提高集群利用率,這時候就需要流動計算架構(SOA)[ Service Oriented Architecture],用于提高機器利用率的資源調度,SOA是一個治理中心,綜上所述,到目前,軟件系統架構演變經歷了:單一應用架構->垂直應用架構->分布式應用架構->流動計算架構,下面Dubbo官網的圖片可以很好的描述
      在這里插入圖片描述

      1.3、什么是RPC?

      RPC概念
      RPC【Remote Procedure Call】是指遠程過程調用,是一種進程間通信方式,他是一種技術的思想,而不是規范。它允許程序調用另一個地址空間(通常是共享網絡的另一臺機器上)的過程或函數,而不用程序員顯式編碼這個遠程調用的細節。

      RPC核心模塊
      RPC有兩個核心模塊:通信和序列化

      2、什么是Dubbo框架?

      2.1、Apache Dubbo 定義

      Apache Dubbo (incubating) |?d?b??| 是一款高性能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動注冊和發現。

      官網:
      http://dubbo.apache.org/

      2.2、Dubbo角色

      • Provider:暴露服務的服務提供者

      • Container:服務運行的容器

      • Consumer:調用遠程服務的消費者

      • Registry:服務注冊和發現的注冊中心

      • Minitor:統計服務調用次數和時間的監控中心

      2.3、Apache Dubbo原理

      Dubbo的服務治理:
      在這里插入圖片描述

      Dubbo原理圖片,圖片來自Dubbo官網:

      在這里插入圖片描述

      調用過程:

      下面根據我的理解說明一下

      • 0:服務器容器負責啟動、加載、運行服務提供者

      • 1:服務提供者在啟動后就可以向注冊中心暴露服務

      • 2:服務消費者在啟動后就可以向注冊中心訂閱想要的服務

      • 3:注冊中心向服務消費者返回服務調用列表

      • 4:服務消費者基于軟負載均衡算法調用服務提供者的服務,這個服務提供者有可能是一個服務提供者列表,調用那個服務提供者就是根據負載均衡來調用了

      • 5:服務提供者和服務消費者定時將保存在內存中的服務調用次數和服務調用時間推送給監控中心

      3、Dubbo Spring Cloud

      3.1 概念定義

      Spring Cloud Alibaba Dubbo是Spring Cloud Alibaba項目中的一個,擴展了分布式服務調用能力,不僅能使 Apache Dubbo 和 OpenFeign 共存,還允許 Spring Cloud 標準調用底層通過 Dubbo 支持的通訊協議傳輸

      3.2、功能特性對比

      功能特征直接引用官網的歸納:
      在這里插入圖片描述

      4、實驗環境準備

      • 環境準備:
        • 64bit JDK 1.8
        • SpringBoot2.3.7.RELEASE
        • SpringCloud(Hoxton.SR9)
        • SpringCloudAlibaba2.2.2.RELEASE
        • Maven 3.2+
      • 開發工具
        • IntelliJ IDEA
        • smartGit

      5、API工程創建

      使用maven命令

      mvn archetype:generate -DgroupId=com.example.springcloud -DartifactId=dubbo-sample-api -Dversion=0.0.1-SNAPSHOT -DinteractiveMode=false
      

      也可以自己創建一個maven項目
      在這里插入圖片描述
      創建好的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>
          <groupId>com.example.springcloud</groupId>
          <artifactId>artifact-dubbo-sample-api</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <name>artifact-dubbo-sample-api</name>
          <description>Demo project for Spring Boot</description>
          <packaging>jar</packaging>
      
          <dependencies>
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                  <scope>test</scope>
              </dependency>
          </dependencies>
      
      </project>
      
      

      寫個api接口:

      package com.example.springcloud.api.service;
      
      /**
       * <pre>
       *      ApiService
       * </pre>
       *
       * <pre>
       * @author mazq
       * 修改記錄
       *    修改后版本:     修改人:  修改日期: 2021/01/19 14:57  修改內容:
       * </pre>
       */
      public interface ApiService {
          String echo(String message);
      }
      
      

      6、啟動Nacos服務中心

      詳情可以參考官網:https://nacos.io/zh-cn/docs/quick-start.html,需要先下載nacos服務端源碼,下載源碼后編譯啟動項目:

      window+R啟動cmd窗口,cd到nacos server的bin目錄,linux系統直接使用cd ${nacos_server_home}/bin

      ./startup.sh -m standalone
      

      window系統使用命令startup.cmd -m standalone
      在這里插入圖片描述

      啟動成功,訪問:http://127.0.0.1:8848/nacos,賬號密碼都是nacos
      在這里插入圖片描述
      登錄成功,來到主頁:
      在這里插入圖片描述

      7、服務提供者工程創建

      新建項目,使用阿里的service url:
      在這里插入圖片描述
      選擇jdk版本,打包方式:
      在這里插入圖片描述
      選擇組件:
      在這里插入圖片描述
      自動生成項目:加上@EnableDiscoveryClient支持服務注冊到nacos

      
      package com.example.springcloud.provider.nacosdiscovery;
      
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.context.annotation.Configuration;
      
      @EnableDiscoveryClient
      @Configuration
      public class NacosDiscoveryConfiguration {
      }
      
      

      使用@DubboService提供dubbo服務:

      package com.example.springcloud.provider.service;
      
      import com.example.springcloud.api.service.ApiService;
      import org.apache.dubbo.config.annotation.DubboService;
      import org.apache.dubbo.config.annotation.Service;
      
      /**
       * <pre>
       *      EchoServiceImpl
       * </pre>
       *
       * <pre>
       * @author mazq
       * 修改記錄
       *    修改后版本:     修改人:  修改日期: 2021/01/19 15:13  修改內容:
       * </pre>
       */
      @DubboService
      public class EchoServiceImpl implements ApiService {
          @Override
          public String echo(String message) {
              return String.format("echo:%s",message);
          }
      }
      
      

      application.properties配置:

      # 應用名稱
      spring.application.name=dubbo-provider-sample
      
      # dubbo 協議
      dubbo.protocol.id=dubbo
      dubbo.protocol.name=dubbo
      # dubbo 協議端口( -1 表示自增端口,從 20880 開始)
      dubbo.protocol.port=-1
      # Dubbo 消費端訂閱服務端的應用名,多個服務提供者用逗號分隔
      # 這里訂閱"自己",會被忽略掉,請根據實際情況添加
      dubbo.cloud.subscribed-services=dubbo-provider-sample
      # dubbo 服務掃描基準包
      dubbo.scan.base-packages=com.example.springcloud.provider
      
      # Actuator Web 訪問端口
      management.server.port=8082
      management.endpoints.jmx.exposure.include=*
      management.endpoints.web.exposure.include=*
      management.endpoint.health.show-details=always
      
      # 應用服務 WEB 訪問端口
      server.port=8080
              
      # Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts.html
      # Nacos認證信息
      spring.cloud.nacos.discovery.username=nacos
      spring.cloud.nacos.discovery.password=nacos
      # Nacos 服務發現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口
      spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
      # 注冊到 nacos 的指定 namespace,默認為 public
      spring.cloud.nacos.discovery.namespace=public
      

      啟動項目,到nacos服務查看服務
      在這里插入圖片描述

      在這里插入圖片描述

      8、服務消費者工程創建

      新建一個dubbo-consumer-sample服務消費者工程,創建過程和服務提供者工程一樣,不過配置需要進行修改,避免端口沖突

      # 應用名稱
      spring.application.name=dubbo-consumer-sample
      
      # 應用服務 WEB 訪問端口
      server.port=9090
      
      # Actuator Web 訪問端口
      management.server.port=9091
      management.endpoints.jmx.exposure.include=*
      management.endpoints.web.exposure.include=*
      management.endpoint.health.show-details=always
      
      # Nacos幫助文檔: https://nacos.io/zh-cn/docs/concepts.html
      # Nacos認證信息
      spring.cloud.nacos.discovery.username=nacos
      spring.cloud.nacos.discovery.password=nacos
      # Nacos 服務發現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口
      spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
      # 注冊到 nacos 的指定 namespace,默認為 public
      spring.cloud.nacos.discovery.namespace=public
      
      # Dubbo服務配置
      # dubbo 協議
      dubbo.protocol.id=dubbo
      dubbo.protocol.name=dubbo
      # dubbo 協議端口( -1 表示自增端口,從 20880 開始)
      dubbo.protocol.port=-1
      # Dubbo 消費端訂閱服務端的應用名,多個服務提供者用逗號分隔
      dubbo.cloud.subscribed-services=dubbo-provider-sample
      

      使用@DubboReference訂閱服務:

      package com.example.springcloud.consumer;
      
      import com.example.springcloud.api.service.ApiService;
      import org.apache.dubbo.config.annotation.DubboReference;
      import org.apache.dubbo.config.annotation.Reference;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @SpringBootApplication
      @RestController
      public class DubboConsumerSampleApplication {
      
      
          @DubboReference
          private ApiService echoService;
      
          @GetMapping("/echo")
          public String echo(String message) {
              return echoService.echo(message);
          }
      
          public static void main(String[] args) {
              SpringApplication.run(DubboConsumerSampleApplication.class, args);
          }
      
      }
      
      

      在這里插入圖片描述
      linux測試接口使用命令curl,window直接到瀏覽器或者postman測試:

      curl http://127.0.0.1:9090/echo?message=nacos
      echo:nacos
      

      9、博客參考資料

      posted @ 2021-05-31 13:51  smileNicky  閱讀(1344)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久青草国产在视频在线观看| 97久久精品亚洲中文字幕无码| 欧洲一区二区中文字幕| 一区二区三区av天堂| 成人无码潮喷在线观看| 建昌县| 国产91精品一区二区亚洲| 日韩av片无码一区二区不卡 | 116美女极品a级毛片| 中文成人无字幕乱码精品区| 久久人人爽人人爽人人av| 国产欧美va欧美va在线| av老司机亚洲精品天堂| 国产高清自产拍av在线| 久久精品国产亚洲欧美| 国产av无码专区亚洲av软件| 亚洲av鲁丝一区二区三区黄| 制服 丝袜 亚洲 中文 综合| 凤冈县| 精品国产一区二区三区av色诱 | 国产日韩av一区二区在线| 日韩中文字幕免费在线观看| 一区二区三区AV波多野结衣| 最近中文字幕国产精品| 免费观看全黄做爰大片国产| 久久久亚洲欧洲日产国码αv| 香蕉EEWW99国产精选免费| 亚洲欧美牲交| 最新的国产成人精品2020| 国产精品国产三级国AV | 婷婷四房综合激情五月在线| 中文字幕久久精品波多野结| 国产精品免费观看色悠悠| 日本一区二区三本视频在线观看| 欧洲中文字幕一区二区| 中方县| 18禁无遮挡啪啪无码网站| 三级国产在线观看| 久久夜色精品国产亚洲av| 亚洲综合久久一区二区三区| 家庭乱码伦区中文字幕在线|