(二)微服务注册与发现

微服务注册与发现

1 服务调用

1.1 需求场景

学生查询已下单股票列表时,需要去股票服务中获取股票详情,补全股票信息。

1.2 单体应用服务间调用

所有接口在同一容器同一应用上下文中,可能直接调用。

在这里插入图片描述

1.3 微服务化后服务间调用

服务相互独立,发布在不同容器中,需要通过远程调用。

在这里插入图片描述

1.4 微服务化带来的问题

1.服务消费者配置依赖了服务提供者的网络地址(ip和端口),当服务提供者网路地址发生变化,会导致服务消费者修改配置,重新发布。

2.消费者只能配置单点服务提供者网络地址,导致单点问题,哪怕是通过nginx代理之后,服务提供者集群节点发生变化,也需要修改nginx配置,并重新发布

2 服务注册与发现

要想解决这些问题,服务消费者需要一个强大的服务注册和发现机制,服务消费者使用这种机制获取服务提供者的网络信息,服务消费者可以动态感知到服务提供者网络变化,无需修改配置。
服务注册和发现结构大致如下:

微服务的网路地址都有服务注册中心管理,提供一下功能:
1.微服务信息存储:用来记录每个微服务的信息,列入微服务的唯一标示,网络信息(ip和端口);

2.提供服务的注册,注销和发现功能,注册和注销用于每个微服务提供者信息变化管理,发现功能用于服务消费者获取可用的微服务提供者信息;

3.服务检查机制,服务的注册和注销是由服务提供者主动发起变更请求,服务提供者正常情况下没问题,当出现宕机,网络问题导致服务提供者不能发起请求或者请求丢失,导致已注册服务信息无法,所以服务注册中心需要对已注册的服务做定时的检查机制。当某个微服务实例长时间无法访问,需要移除该实例。

spring cloud 给我们提供了多个注册中心组件的支持,例如Eureka,zk等,下面就来讲讲官方推荐的Eureka。

2.1 Eureka介绍

Eureka是Netflix开源的服务发现组件,本身是一个基于REST的服务。它包含Server和Client两部分。SpringCloud将它集成在子项目Spring Cloud Netflix中,从而实现微服务的注册与发现。

2.2 Eureka 高可用架构

官方提供的Eureka 高可用架构是基于AWS(Amazon Web Services)服务架构设计的。通常在我们这种非AWS环境下,us-east-1c、us-east-1d和us-east-1e可理解成不同的机房。

Eureka 高可用架构中:

  • Application Service相当于服务提供者
  • Application Client相当于服务消费者
  • Application Client 通过发现Eureka中 Application Service注册的网络信息实现远程调用(make remote call)

Eureka包含两个组件:Eureka Server和Eureka Client。

  • Eureka Server提供服务注册(Register)、续费(Renew)、注销(Cancel)、发现(Get Register)和同步(Replicate)的RESTful API,供Eureka Client 调用。
  • Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。
  • 如果Eureka Server在一定时间内没有接收到某个微服务实例的续约(Renew)心跳(默认30秒),Eureka Server将会注销该实例(默认90秒)。
  • 在高可用Eureka 架构中,Eureka Server同时默认也是Eureka Client,多个Eureka Server通过复制同步(Replicate)服务注册信息
  • Eureka Client会缓存服务注册表中的信息。这种方式有一定的优势——首先,微服务无须每次请求都查询Eureka Server,从而降低了Eureka Server的压力;其次,即使Eureka Server所有节点都宕掉,服务消费者

3 Eureka 实战

结合前面服务调用中学生和股票服务之间的业务场景集成Eureka,并将股票服务(服务提供者)注册到Eureka Server中

3.1 编写一个Eureka Server

1.创建一个ArtifactId是finace-training-eureka-server的Maven工程,并为项目添加以下依赖。

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

2.在配置文件application.yml中添加如下内容。

server:  
	port: 8761
eureka:  
    client:    
        registerWithEureka: false    
        fetchRegistry: false    
        serviceUrl:      
            defaultZone: http://localhost:8761/eureka/

简要讲解一下 application.yml中的配置属性:

eureka.client.registerWithEureka:表示是否将自己注册到Eureka Server,默认为true。由于当前应用就是Eureka Server,故而设为false。
eureka.client.fetchRegistry:表示是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。
eureka.client.serviceUrl.defaultZone:设置与Eureka Server交互的地址,查询服务与注册服务都需要依赖

3.编写启动类,在启动类上添加@EnableEurekaServer注解,声明这是一个Eureka Server。

package com.myhexin.finace.training.eureka.server;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
   
public static void main(String[] args) {
   
      SpringApplication.run(EurekaApplication.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值