myJavaSE

使用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.测试

 

 

 

 

 

 

 

posted on 2019-12-27 19:45  myJavaSE  阅读(966)  评论(0编辑  收藏  举报

导航