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

举报
码农飞哥 发表于 2021/05/29 13:07:40 2021/05/29
【摘要】 简介 上一篇《Spring Cloud 学习笔记01----微服务简介》我们简单的对Spring Cloud做了个介绍。接下来我们接着学习Spring Cloud 的一个核心组件 Spring Cloud Eureka。Spring Cloud Eureka主要负责完成微服务架构中的服务治理功能,其包括 服务注册中心,服务注册与发现机制。 我们将从如下几个方面学习Eu...

简介

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

  • 构建服务注册中心
  • 服务注册与服务发现
  • Eureka的基础架构
  • Eureka的服务治理机制
  • 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>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  1. 通过 @EnableEurekaServer 注解启动一个服务注册中心提供给其他应用进行对话
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 默认情况下该注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,只需要在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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

eureka.client.registerWithEureka: 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己
eureka.client.fetchRegistry :由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false。
eureka.client.serviceUrl.defaultZone : 定义注册中心地址
5. 启动服务访问http://localhost:1111/ 得到结果如下:
在这里插入图片描述

注册服务提供者

  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>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  1. 接着改造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; }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. 然后在主类中通过加上@EnableDiscoveryClient注解,激活Eureka中的DiscoveryClient实现(自动化配置,创建DiscoveryClient接口针对Eureka客户端的EurekaDiscoveryClient实例),才能实现上述Controller中对服务信息的输出
@SpringBootApplication
@EnableDiscoveryClient
public class OrderProviderApplication { public static void main(String[] args) { SpringApplication.run(OrderProviderApplication.class, args); }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  1. 然后在application.yml 中加入如下配置
spring:
  application:
  # 给服务命名 name: order-service
eureka:
  client: service-url: # 用于指定注册中心的地址 defaultZone: http://localhost:1111/eureka/
server:
  port: 2001

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

启动服务

  • 启动order-provider 服务,在order-provider服务控制台中,Tomcat启动之后,com.netflix.discovery.DiscoveryClient对象打印了该服务的注册信息。表示服务注册成功
    在这里插入图片描述
  • 此时在注册中心的控制台中,可以看到类似下面的输出,名为order-service 的服务被注册成功了。
    在这里插入图片描述
  • 通过访问Eureka的信息面板,可以看到服务被注册成功。
    在这里插入图片描述
  • 通过访问http://localhost:2001/dc 直接向给服务发起请求,在控制台中可以看到如下输出:
    在这里插入图片描述

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

文章来源: feige.blog.csdn.net,作者:码农飞哥,版权归原作者所有,如需转载,请联系作者。

原文链接:feige.blog.csdn.net/article/details/86556179

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。