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


相关文章
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
36 6
|
1月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
58 5
|
1月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
43 5
|
6月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
15099 34
|
6月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
636 15
|
6月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
136 3
|
5月前
|
缓存 Java Maven
SpringCloud基于Eureka的服务治理架构搭建与测试:从服务提供者到消费者的完整流程
Spring Cloud微服务框架中的Eureka是一个用于服务发现和注册的基础组件,它基于RESTful风格,为微服务架构提供了关键的服务注册与发现功能。以下是对Eureka的详细解析和搭建举例。
|
6月前
|
消息中间件 Java Nacos
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
通用快照方案问题之通过Spring Cloud实现配置的自动更新如何解决
86 0
|
6月前
|
缓存 监控 Java
通用快照方案问题之Spring Boot Admin的定义如何解决
通用快照方案问题之Spring Boot Admin的定义如何解决
74 0

热门文章

最新文章