美文网首页我爱编程
spring cloud 初识

spring cloud 初识

作者: 云师兄 | 来源:发表于2018-03-31 22:42 被阅读13次

spring cloud 简介

是一套解决分布式架构的框架,提供配置管理、服务注册、服务发现、断路器、智能路由、负载均衡、微代理、一次性令牌、控制总线...等功能。spring boot 是构建spring cloud 架构的基础,spring cloud的每一个子项目都是基于spring boot构建的。

spring cloud子项目介绍

  • spring cloud config
    配置中心,利用git 来集中管理程序的配置。
  • spring cloud netflix
    集成众多netflix的开源组件,包括eureka,hystrix,zuul等
  • spring cloud bus
    消息总线,利用分布式消息将服务和服务实例连接在一起,用于在集群中传播状态的变化,比如配置更改的事件。
  • spring cloud security
    在zuul 代理中为oauth2 rest客户端和认证头转发提供负载均衡。
    ......

Eureka 服务注册与发现

下面我们通过一个demo来了解如何实现eureka server:
首先我们需要在pom.xml中添加对spring cloud的依赖:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>

与普通的spring boot项目不同之处在于此处添加了<dependencyManagement>标签包含的部分,其中spring cloud的版本以version标签标示,且版本以伦敦地铁站的名字来表示,此处我们粘贴<properties>标签的部分是为了提醒大家,spring cloud的版本和spring boot版本存在依赖关系,如果spring cloud版本未配置对应的spring boot版本,则启动项目的时候会抛出异常:

Failed to process import candidates for configuration class ......

上面的配置经验证无误,服务可以正常启动。
接下来我们只需添加一个@EnableEurekaServer注解就可以启动一个服务注册中心:

@EnableEurekaServer
@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}

另外我们还需配置一下配置文件,控制其注册行为:

server.port=8761
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/

eureka配置中:

  1. eureka.client.register-with-eureka 表示是否向注册中心注册自己(由于eureka服务端也可以作为客户端在其他服务端被注册),此处我们先设置为false,即不向注册中心注册自己。
  2. eureka.client.fetch-registry 是否去检索查找服务(发现服务也是客户端的工作,此处我们暂且设为false)
  3. eureka.client.serviceUrl.defaultZone eureka server 启动地址。

完成上述操作后,我们就可以正常启动一个eureka server了,启动完后,通过访问:http://localhost:1111/
就可以打开下面的界面:

image.png
在Instances currently registered with Eureka模块中当前显示:No instances available。这是因为现在我们只实现了一个注册中心,还没有实现其他服务。

实现了服务的注册eureka server后,我们接着实现eureka客户端:
pom.xml文件中添加如下:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    
   <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>

启动应用处添加注解:

@SpringBootApplication
@EnableDiscoveryClient
public class ConcurrencyApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConcurrencyApplication.class, args);
    }
}

配置文件中加上:

spring.application.name=micro-weather-eureka-client
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

spring.application.name表示服务名称
eureka.client.serviceUrl.defaultZone表示指定服务注册中心的地址。
配置好后,我们首先启动之前编写好的eureka server服务demo,然后再启动eureka client 服务demo。然后我们访问http://localhost:8761/后截屏如下:

image.png
这时我们发现Instances currently registered with Eureka列表中已经显示我们刚刚实现的应用eureka client了,名称为micro-weather-eureka-client,状态为UP,即启动。

spring cloud 常见消费模式

  • 客户端发现模式(客户端负载均衡)
  1. 服务实例启动后,将自己的位置信息提交到服务注册表。
  2. 客户端从服务注册表进行查询,来获取可用的服务实例。
  3. 客户端自行使用负载均衡算法从多个服务实例中选择出一个。


    image.png
  • 服务端发现模式(服务端负载均衡)
    负载均衡器独立部署在服务端


    image.png

常见微服务消费者

  • Apache HttpClient
  • Ribbon (spring cloud 中基于netflix的ribbon实现的客户端负载均衡工具)
  • Feign (feign 是一种eureka 客户端)

相关文章

网友评论

    本文标题:spring cloud 初识

    本文链接:https://www.haomeiwen.com/subject/qujncftx.html