Spring Cloud微服务学习笔记之服务治理 Eureka

一、Spring Cloud Eureka的使用

服务治理组件Spring Cloud Eureka是微服务架构最基础的模块。为什么要有服务治理组件?在服务数量较少时,我们可以通过静态配置来完成服务间的相互调用。随着系统越来越复杂,服务数量越来越多,且可能数量在不断频繁变化,手工维护的静态配置将越来越难,需要一个组件来完成自动化的服务注册与发现功能。Eureka由Eureka Server与Eureka Client两个组件组成。

1.1 Eureka Server的使用

首先,在IDEA中通过Spring Initializr选择Spring Cloud Discovery 中的Eureka Server组件(将自动在pom.xml添加Eureka Server相关的依赖),创建一个Spring Boot项目添加pom依赖(之后项目都要添加)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 直接运行该程序,启动后在浏览器访问localhost:1111,结果如图所示

error

  1. 在原程序上只添加一个Eureka Server的注解,运行程序访问localhost:1111结果如图
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

在这里插入图片描述

  1. 在application.yml中修改相应的配置
server:
  port: 1111
eureka:
  client:
    fetch-registry: false
    register-with-eureka: false
    service-url:
      defaultZone: http://localhost:1111/eureka/
  server:
    enable-self-preservation: false
spring:
  application:
    name: eureka

server.port 用来指定该服务运行时所占用的端口号(内置Tomcat容器运行时的端口号)

eureka.client.register-with-eureka 用来指定注册中心是否注册自己的微务

神坑:server.port与eureka.client.register-with-eureka端口号一定要相同,否则自身是无法注册在注册中心的,其他client也无法注册

eureka.client.fetch-registry 用来指定是否需要检索服务,即服务发现

eureka.client.service-url 用来指定注册中心的地址,其他服务注册时要注册在这个地址上

eureka.server.enable-self-preservation 用来指定注册中心的健康检查机制,开发状态下默认是宁可信其有不可信其无的模式,与生产环境保持一致则设为false

spring.application.name 用来指定该服务的名称

1.2 Eureka Client的使用

同server,在IDEA中通过Spring Initializr选择Spring Cloud Discovery 中的Eureka Discovery Client 组件,创建一个Spring Boot项目

  1. 在原程序上添加一个@EnableEurekaClient的注解

@EnableDiscoveryClient与@EnableEurekaClient区别:
如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,
如果选用其他的注册中心,那么推荐使用@EnableDiscoveryClient,
源码中@EnableEurekaClient注解包含@EnableDiscoveryClient注解。

  1. 在application.yml中修改相应的配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:1111/eureka/
  instance:
    hostname: ClientName
spring:
  application:
    name: client

eureka.instance.hostname 用来指定该服务实例后来访问时的域名,即替代下图红框中的内容

  1. 在已启动注册中心的情况下,运行Client 程序,然后访问localhost:1111结果如图

在这里插入图片描述
可见client端已注册在注册中心上

1.3 Eureka的高可用

为什么要Eureka高可用? 所有的服务都注册在注册中心上,若注册中心宕机,整个微服务框架将不可用,那么此时服务拆分与单体架构并无区别,不能达到高可用的目的。

  1. 在原有项目的基础上,注释掉server.port=1111的配置,在启动配置中复制一份服务,并在启动配置中配置server.port

    EurekaApplication1服务运行端口为1112,注册在EurekaApplication2的地址http://localhost:1111/eureka/上;

    EurekaApplication2服务运行端口为1111,注册在EurekaApplication1的地址http://localhost:1112/eureka/上;

在这里插入图片描述
在这里插入图片描述

  1. Eureka Client 服务不变(注册在EurekaApplication1上),此时运行两个Eureka server服务,访问localhost:1111即EurekaApplication2服务,发现Eureka Client 服务也注册在了EurekaApplication2上。

  2. 若此时EurekaApplication1宕机,client 仍注册在EurekaApplication2上,保障了Eureka Server的高可用;但如若此时又将client 重启,将无法注册在EurekaApplication2上,所以应该将client 在EurekaApplication1、EurekaApplication2都要注册,即defaultZone= http://localhost:1111/eureka/, http://localhost:1112/eureka/。逻辑图如下:

在这里插入图片描述
4. 3个Eureka Server的高可用逻辑图如图

在这里插入图片描述

二、Eureka在分布式中的地位与原理

2.1 服务发现的两种方式

  1. 客户端发现

    Eureka Client就是这种方式,Client(A) 在 Eureka Server上获取要消费的多个服务实例(B1、B2、B3…)并缓存在本地,通过负载均衡算法(轮询、随机、哈希等)选择一个实例去消费。该方式简单直接,但需要每个Client实现一套选择机制。Spring Cloud全系列实现方式

  2. 服务端发现(代理)

    Eureka Server与要消费的多个服务实例(B1、B2、B3…)对Client(A)透明不可见,A只需访问代理,由代理选择一个B供消费。Ngnix、Zookeeper、K8S都可以作为服务发现的负载均衡器。阿里系实现方式

    Ngnix不仅可以作为HTTP反向代理服务器也可以做服务发现的负载均衡器

2.2 服务实现语言的两种方式

  1. 相同语言(Java)

    Eureka Server与Eureka Client 均是由Java实现的。Spring Cloud全系列框架主要适于Java实现的分布式系统,或者与JVM兼容的语言构建的系统。如若其他语言想应用Eureka,需自己实现客户端,如.NET的Steeltoe、Node.js的eureka-js-client。服务间调用方式为Restful。

  2. 不同语言

    不同语言是微服务的特点之一即异构(不同语言、不同数据库),此时最好使用阿里系的dubbo,效率会更高。服务间调用方式为RPC。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值