分佈式服務架構(微服務架構)

分佈式服務架構(微服務架構)

目前主流實現:Dubbo+zookeeper和SpringBoot+Cloud

利用上述技術都可以將功能服務分散到不同服務器部署,然後實現服務間通信(調用)。

請求-->處理1-->處理2-->響應。意思可以將處理1和處理2做成獨立服務分開部署,然後再進行RPC(Dubbo)或HTTP請求和響應模式(Cloud)交互。

Dubbo和Cloud的區別如下:

  • Dubbo和Cloud服務調用機制不同,一個RPC、一個HTTP請求響應
  • Dubbo一般和zookeeper結合管理服務,Cloud內置集成Eureka管理服務
  • Cloud提供一套服務管理的完整方案、Dubbo需要跟其他技術集成使用。
  • Cloud僅用於Rest服務管理、Dubbo是將組件服務化管理

Spring Cloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等。

  • Spring Cloud Netflix

  是對Netflix開發的一套分佈式服務框架的封裝,包括服務的發現和註冊,負載均衡、斷路器、REST客戶端、請求路由等。

  • Spring Cloud Config

  將配置信息中央化保存, 配置Spring Cloud Bus可以實現動態修改配置文件

  • Spring Cloud Bus

  分佈式消息隊列,是對Kafka, MQ的封裝

  • Spring Cloud Security

  對Spring Security的封裝,並能配合Netflix使用

  • Spring Cloud Zookeeper

  對Zookeeper的封裝,使之能配置其它Spring Cloud的子項目使用

  • Spring Cloud Eureka

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分,它基於Netflix Eureka 做了二次封裝,主要負責完成微服務架構中的服務治理功能。

基於SpringCloud實現服務註冊、查找、負載功能

搭建SpringCloud服務中心(eureka)

  1. 創建maven project,引入pom.xml定義

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.7.RELEASE</version>
        <relativePath/>
    </parent>
    
    <properties>
        <java.version>1.7</java.version>
    </properties>
    
    <dependencies>
    <!-- springcloud-eureka-server -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka-server</artifactId>
      <version>1.3.4.RELEASE</version>
    </dependency>
    
    </dependencies>
    
    <dependencyManagement>
    <dependencies>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-parent</artifactId>
          <version>Brixton.SR5</version>
          <type>pom</type>
        </dependency>
    </dependencies>
    </dependencyManagement>
    
  2. 追加application.properties中eureka參數定義

    #eureka
    #spring.application.name=EUREKA-SERVER
    eureka.client.registerWithEureka=false
    eureka.client.fetchRegistry=false
    eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
    
  3. 追加啓動類,使用@EnableEurekaServer

    @EnableEurekaServer//啓動eureka服務器
    @SpringBootApplication
    public class EurekaServerBootApplication {
    
        public static void main(String[] args){
            SpringApplication.run(EurekaServerBootApplication.class, args);
        }
    
    }
    
  4. 啓動程序測試

    打開瀏覽器輸入http://localhost:7777

向SpringCloud註冊Service服務(Restful服務)

  1. 在工程中pom.xml中引入jar包定義

    <dependencyManagement>
        <dependencies>
            <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-parent</artifactId>
              <version>Brixton.SR5</version>
              <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
          <version>1.3.4.RELEASE</version>
        </dependency>
        <!-- 指定導入jackson包版本,避免eureka和boot衝突 -->
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
          <version>2.8.8</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-core</artifactId>
          <version>2.8.8</version>
        </dependency>
    </dependencies>
    
  2. 在application.properties文件追加eureka定義

    spring.application.name=PAPER-SERVICE
    eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
    
  3. 在啓動類前追加@EnableDiscoveryClient

    @EnableDiscoveryClient
    @SpringBootApplication
    @MapperScan(basePackages="cn.xdl.ovls.paper.dao")
    public class PaperBootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(PaperBootApplication.class, args);
        }
    
    }
    
  4. 啓動程序測試

    先啓動Eureka服務中心項目,然後啓動服務項目。

    瀏覽器輸入http://localhost:7777就可以查看註冊實例

SpringCloud服務調用(RestTemplate模式)

  1. 在項目中pom.xml引入定義

    <!-- ribbon -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
      <version>1.3.4.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-ribbon</artifactId>
      <version>1.3.4.RELEASE</version>
    </dependency>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-parent</artifactId>
              <version>Brixton.SR5</version>
              <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  2. 在application.properties追加eureka參數

    eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
    
  3. 創建RestTemplate對象,追加@LoadBalanced,啓用ribbon負載功能

    @Configuration
    public class RestTemplateConfiguration {
    
        @Bean
        @LoadBalanced//追加ribbon負載功能
        public RestTemplate createRestTemplate(){
            return new RestTemplate();
        }
    
    }
    
  4. 注入RestTemplate對象,利用服務名調用Restful服務

    @Autowired
    private RestTemplate template;
    
    //url規則: http://註冊服務名/請求名
    ResponseResult result = template.getForObject(
        "http://SUBJECT-SERVICE/subject", ResponseResult.class);
    
  5. 在啓動類前,追加@EnableDiscoveryClient

    @EnableDiscoveryClient//啓用服務註冊和查找
    @SpringBootApplication
    public class ExamWebBootApplication {
    
        public static void main(String[] args){
            SpringApplication.run(ExamWebBootApplication.class, args);
        }
    
    }
    
  6. 啓動測試

SpringCloud服務調用(Feign接口對象模式)

  1. 在pom.xml中追加ribbon和feign定義

    <dependencies>
        <!-- ribbon -->
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka</artifactId>
          <version>1.3.4.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-ribbon</artifactId>
          <version>1.3.4.RELEASE</version>
        </dependency>
    
        <!-- feign調用 -->
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-feign</artifactId>
          <version>1.3.4.RELEASE</version>
        </dependency>
    
    </dependencies>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-parent</artifactId>
              <version>Brixton.SR5</version>
              <type>pom</type>
            </dependency>
        </dependencies>
    

  2. 在application.properties中配置eureka參數

    eureka.client.serviceUrl.defaultZone=http://localhost:7777/eureka
    
  3. 定義遠程Feign接口,追加@FeignClient標記

    @FeignClient(name="SUBJECT-SERVICE")//指定註冊服務名
    public interface SubjectRemote {
    
        //方法參考Controller定義編寫
        @RequestMapping(value="/subject",method=RequestMethod.GET)
        public ResponseResult loadSubjects();
    
    }
    
  4. 注入Feign接口對象調用遠程服務

    @Autowired
    private SubjectRemote subjectRemote;
    //利用Feign接口對象方法調用遠程服務
    ResponseResult result = subjectRemote.loadSubjects();
    
  5. 在主入口類中追加@EnableFeignClients和@EnableDiscoveryClient標記

    @EnableFeignClients//啓用Feign接口模式調用服務
    @EnableDiscoveryClient//啓用服務註冊和查找
    @SpringBootApplication
    public class ExamWebBootApplication {
    
        public static void main(String[] args){
            SpringApplication.run(ExamWebBootApplication.class, args);
        }
    
    }
    
  6. 啓動程序測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章