Spring Cloud 学习笔记02----服务治理

简介: 上一篇《Spring Cloud 学习笔记01----微服务简介》我们简单的对Spring Cloud做了个介绍。接下来我们接着学习Spring Cloud 的一个核心组件 Spring Cloud Eureka。Spring Cloud Eureka主要负责完成微服务架构中的服务治理功能,其包括 服务注册中心,服务注册与发现机制。我们将从如下几个方面学习Eureka

简介


上一篇《Spring Cloud 学习笔记01----微服务简介》我们简单的对Spring Cloud做了个介绍。接下来我们接着学习Spring Cloud 的一个核心组件 Spring Cloud Eureka。Spring Cloud Eureka主要负责完成微服务架构中的服务治理功能,其包括 服务注册中心,服务注册与发现机制。

我们将从如下几个方面学习Eureka


1.构建服务注册中心

2.服务注册与服务发现

3.Eureka的基础架构

4.Eureka的服务治理机制

5.Eureka的配置

环境

基于Spring Cloud Finchley.RELEASE 版本

Spring Boot 2.1.2.RELEASE


构建服务注册中心

1.创建一个基础的SpringBoot 项目,命名为eureka-server,引入必要的依赖

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.2.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <properties>
  <java.version>1.8</java.version>
  <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
  </properties>
  <dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  </dependency>
  </dependencies>
<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>

2.通过 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话

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

3.默认情况下该注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在application.yml中增加如下配置:

server:
   port: 1111
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
  application:
    name: eurka-server

eureka.client.registerWithEureka: 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己

eureka.client.fetchRegistry :由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false。

eureka.client.serviceUrl.defaultZone : 定义注册中心地址

4. 启动服务访问http://localhost:1111/ 得到结果如下:

d09acde4ba893da4e81abe531c1a10a1_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png


注册服务提供者

1.新建一个普通的Spring Boot 项目,增加Spring Cloud Eureka模块的依赖。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
       <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
   <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
 <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>

2.接着改造OrderController类,通过注入接口 DiscoveryClient对象,在控制台打印调用服务的服务名。

@RestController
public class OrderController {
    @Autowired
    DiscoveryClient discoveryClient;
    @GetMapping("/dc")
    public String dc() {
        String services = "Services: " + discoveryClient.getServices();
        System.out.println(services);
        return services;
    }
}

3.然后在主类中通过加上@EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient实现(自动化配置,创建DiscoveryClient接口针对Eureka客户端的EurekaDiscoveryClient实例),才能实现上述Controller中对服务信息的输出

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

4.然后在application.yml 中加入如下配置

spring:
  application:
  # 给服务命名
    name: order-service
eureka:
  client:
    service-url:
    # 用于指定注册中心的地址
      defaultZone: http://localhost:1111/eureka/
server:
  port: 2001

启动服务

启动order-provider 服务,在order-provider服务控制台中,Tomcat启动之后,com.netflix.discovery.DiscoveryClient对象打印了该服务的注册信息。表示服务注册成功

46fc0b139ed9a17549b61a6c5c8d1555_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTQ1MzQ4MDg=,size_16,color_FFFFFF,t_70.png

此时在注册中心的控制台中,可以看到类似下面的输出,名为order-service 的服务被注册成功了。

ec7e251fda84d397ae90a7fa79696637_20190121223956200.png

通过访问Eureka的信息面板,可以看到服务被注册成功。

18837e14506e4d5d7e1ab35d7c8a6e8e_20190121224046451.png

通过访问http://localhost:2001/dc 直接向给服务发起请求,在控制台中可以看到如下输出:

e2ee1a3d38b2515a070ac00e88c4ee38_20190121224251239.png

Eureka的基础架构


整个Eureka服务治理基础架构有三个核心要素。

- 服务注册中心

Eureka 提供的服务端,提供服务注册与发现的功能,也就是我们示例中的eurka-server。

- 服务提供者

提供服务的应用,可以使Spring Boot应用,也可以是其他技术平台且遵循Eureka通信机制的应用。它将自己提供的服务注册到Eureka,以供其他应用发现,也就是我们示例中的order-service。

- 服务消费者

消费者应用从服务注册中心获取服务列表,从而是消费者可以知道去何处调用其所需要的服务。我们可以使用Ribbon 来实现服务消费,或者使用Feign 的消费方式。

源码下载

https://github.com/XWxiaowei/SpringCloud-Learning/tree/master/2-Finchley版教程示例/Chapter3-1

参考引用

《Spring Cloud 微服务实战》第3章

https://springcloud.cc/spring-cloud-dalston.html


相关文章
|
30天前
|
负载均衡 Java API
Spring Cloud 面试题及答案整理,最新面试题
Spring Cloud 面试题及答案整理,最新面试题
132 1
|
30天前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
138 0
|
1月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
131 0
|
2天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
3天前
|
Java API 对象存储
对象存储OSS产品常见问题之使用Spring Cloud Alibaba情况下文档添加水印如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
22 2
|
17天前
|
负载均衡 网络协议 Java
构建高效可扩展的微服务架构:利用Spring Cloud实现服务发现与负载均衡
本文将探讨如何利用Spring Cloud技术实现微服务架构中的服务发现与负载均衡,通过注册中心来管理服务的注册与发现,并通过负载均衡策略实现请求的分发,从而构建高效可扩展的微服务系统。
|
18天前
|
开发框架 负载均衡 Java
Spring boot与Spring cloud之间的关系
总之,Spring Boot和Spring Cloud之间的关系是一种构建和扩展的关系,Spring Boot提供了基础,而Spring Cloud在此基础上提供了分布式系统和微服务架构所需的扩展和工具。
16 4
Spring boot与Spring cloud之间的关系
|
1月前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
61 1
|
1月前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
185 0
|
22天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
38 0

热门文章

最新文章