使用springCloud搭建微服務


1.springCloud和微服務相關介紹

 

1.1.SpringCloud 是什么

Spring cloud是一個基於Spring Boot實現的服務治理工具包,用於微服務架構中管理和協調服務的,說白了 springCloud是一款用來搭建微服務的框架。

1.2. 組成部分

Spring Cloud一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啟動和部署Springcloud並沒有重復制造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分布式系統開發工具包

以下是主要組成部分:

 

服務發現——Netflix Eureka

 

客服端負載均衡——Netflix Ribbon\Feign

 

斷路器——Netflix Hystrix

 

服務網關——Netflix Zuul

 

分布式配置——Spring Cloud Config

 

 

Spring Cloud共集成了19個子項目,里面都包含一個或者多個第三方的組件或者框架!

 

Spring Cloud 工具框架

 

 

 

1Spring Cloud Config 配置中心,利用git集中管理程序的配置。

 

2Spring Cloud Netflix 集成眾多Netflix的開源軟件

 

3Spring Cloud Bus 消息總線,利用分布式消息將服務和服務實例連接在一起,用於在一個集群中傳播狀態的變化 

 

4Spring Cloud for Cloud Foundry 利用Pivotal Cloudfoundry集成你的應用程序

 

5Spring Cloud Cloud Foundry Service Broker 為建立管理雲托管服務的服務代理提供了一個起點。

 

6Spring Cloud Cluster 基於Zookeeper, Redis, Hazelcast, Consul實現的領導選舉和平民狀態模式的抽象和實現。

 

7Spring Cloud Consul 基於Hashicorp Consul實現的服務發現和配置管理。

 

8Spring Cloud Security Zuul代理中為OAuth2 rest客戶端和認證頭轉發提供負載均衡

 

9Spring Cloud Sleuth SpringCloud應用的分布式追蹤系統,和ZipkinHTraceELK兼容。

 

10Spring Cloud Data Flow 一個雲本地程序和操作模型,組成數據微服務在一個結構化的平台上。

 

11Spring Cloud Stream 基於Redis,Rabbit,Kafka實現的消息微服務,簡單聲明模型用以在Spring Cloud應用中收發消息。

 

12Spring Cloud Stream App Starters 基於Spring Boot為外部系統提供spring的集成

 

13Spring Cloud Task 短生命周期的微服務,為SpringBooot應用簡單聲明添加功能和非功能特性。

 

14Spring Cloud Task App Starters

 

15Spring Cloud Zookeeper 服務發現和配置管理基於Apache Zookeeper

 

16Spring Cloud for Amazon Web Services 快速和亞馬遜網絡服務集成。

 

17Spring Cloud Connectors 便於PaaS應用在各種平台上連接到后端像數據庫和消息經紀服務。

 

18Spring Cloud Starters (項目已經終止並且在Angel.SR2后的版本和其他項目合並)

 

19Spring Cloud CLI 插件用Groovy快速的創建Spring Cloud組件應用。

 

 

 

當然也在不斷增加。。。。

 

1.1. Spring cloud pk dubbo

 

(1)從兩個公司的背景來談:Dubbo,是阿里巴巴服務化治理的核心框架,並被廣泛應用於中國各互聯網公司;Spring Cloud是大名鼎鼎的Spring家族的產品。阿里巴巴是一個商業公司,雖然也開源了很多的頂級的項目,但從整體戰略上來講,仍然是服務於自身的業務為主。Spring專注於企業級開源框架的研發,不論是在中國還是在世界上使用都非常廣泛,開發出通用、開源、穩健的開源框架就是他們的主業。

 

 

 

(2)從社區活躍度這個角度來對比,Dubbo雖然也是一個非常優秀的服務治理框架,並且在服務治理、灰度發布、流量分發這方面做的比Spring Cloud還好,除過當當網在基礎上增加了rest支持外,已有兩年多的時間幾乎都沒有任何更新了。在使用過程中出現問題,提交到githubIssue也少有回復。

 

 

 

相反Spring Cloud自從發展到現在,仍然在不斷的高速發展,從github上提交代碼的頻度和發布版本的時間間隔就可以看出,現在Spring Cloud即將發布2.0版本,到了后期會更加完善和穩定。

 

 

 

(3) 從整個大的平台架構來講,dubbo框架只是專注於服務之間的治理,如果我們需要使用配置中心、分布式跟蹤這些內容都需要自己去集成,這樣無形中使用dubbo的難度就會增加。Spring Cloud幾乎考慮了服務治理的方方面面,更有Spring Boot這個大將的支持,開發起來非常的便利和簡單。

 

 

 

(4)從技術發展的角度來講,Dubbo剛出來的那會技術理念還是非常先進,解決了各大互聯網公司服務治理的問題,中國的各中小公司也從中受益不少。經過了這么多年的發展,互聯網行業也是涌現了更多先進的技術和理念,Dubbo一直停滯不前,自然有些掉隊,有時候我個人也會感到有點可惜,如果Dubbo一直沿着當初的那個路線發展,並且延伸到周邊,今天可能又是另一番景象了。

 

 

 

Spring 推出Spring Boot/Cloud也是因為自身的很多原因。Spring最初推崇的輕量級框架,隨着不斷的發展也越來越龐大,隨着集成項目越來越多,配置文件也越來越混亂,慢慢的背離最初的理念。隨着這么多年的發展,微服務、分布式鏈路跟蹤等更多新的技術理念的出現,Spring急需一款框架來改善以前的開發模式,因此才會出現Spring Boot/Cloud項目,我們現在訪問Spring官網,會發現Spring BootSpring Cloud已經放到首頁最重點突出的三個項目中的前兩個,可見Spring對這兩個框架的重視程度。

 

 

 

總結一下,dubbo曾經確實很牛逼,但是Spring Cloud是站在近些年技術發展之上進行開發,因此更具技術代表性。

2.搭建步驟

1.新建一個普通的maven項目作為父模塊

 

 2.忽略掉.idea和imi文件,File--->settings---->file Types

 

 3.配置父級模塊的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>cn.itsource.springcloud</groupId>
    <artifactId>springcloud-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>eureka-server-1000</module>
        <module>order-client-2000</module>
        <module>user-client-3000</module>
    </modules>

    <!--引入springboot的父級包,幫我們管理springboot的所有包-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <!--
   2.管理SpringCloud的jar包
   -->
    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

4.創建注冊中心模塊

 

 5.配置

2.springcloud-parent管理依賴
 <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.0.5.RELEASE</version>
  </parent>

  <groupId>cn.itsource.springcloud</groupId>
  <artifactId>springcloud-parent</artifactId>
  <version>1.0-SNAPSHOT</version>

  <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Finchley.SR1</spring-cloud.version>
  </properties>
  <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>
      </dependencies>
  </dependencyManagement>
3.springcloud-eureka-server-1000導入依賴
<dependencies>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>
4.主配置類
/**
* @EnableEurekaServer :開啟注冊中心
*/
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication1000 {
  public static void main(String[] args) {
      SpringApplication.run(EurekaServerApplication1000.class);
  }
}
5.配置文件application.yml
server:
port: 1000
eureka:
instance:
  hostname: localhost
client:
  registerWithEureka: false #禁用注冊中心向自己注冊
  fetchRegistry: false #不讓注冊中心獲取服務的注冊列表
  serviceUrl:
    defaultZone: http://localhost:1000/eureka/
    #注冊中心的注冊地址 ,其他微服務需要向這個地址注冊

3.搭建客戶端微服務

1.導入依賴
 <dependencies>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      </dependency>

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

  </dependencies>
2.創建配置類
//@EnableDiscoveryClient:開啟注冊中心客戶端 EurekaClient
@SpringBootApplication
@EnableDiscoveryClient
public class UserServerApplication2000 {
  public static void main(String[] args) {
      SpringApplication.run(UserServerApplication2000.class);
  }
}
3.配置文件
eureka:
client:
  serviceUrl:
    defaultZone: http://localhost:1000/eureka/ #注冊中心地址
server:
port: 2000
spring:
application:
  name: user-server

4.測試

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM