(SpringCloud基础组件)搭建Eureka注册中心以及服务调用-Feign

一、Eureka

1、基本概念

Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目 spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件: Eureka ServerEureka Client

Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。

Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也包含一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会 向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有 接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90 秒)。

Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

2、Eureka的自我保护模式

如果在Eureka Server的首页看到以下这段提示,则说明Eureka已经进入了保护模式:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN
THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE
INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

在这里插入图片描述

该警告是触发了Eureka Server的自我保护机制。

Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果低于,就会将当前实例注册信息保护起来,让实例不会过期,尽可能保护这些注册信息。

但是如果在保护期间,实例出现问题,那么客户端很容易拿到实际已经不存在的服务实例,会出现调用失败。这个时候客户端的容错机制就很重要了。(重新请求,断路器)

保护机制,可能会导致服务实例不能够被正确剔除。

在本地开发时,可使用:eureka.server.enable-self-preservation=false关闭保护机制,使不可用实例能够正常下线。

二、搭建Eureka服务器

官方文档:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html#spring-cloud-eureka-server

项目目录结构:
在这里插入图片描述

搭建Eureka服务器说明:整体项目是个在线教育项目,guli_eduservice模块负责讲师以及课程的管理,其中课程涉及到使用阿里云视频点播功能,以及视频的上传等,guli_eduvod模块专门负责阿里云视频的上传、删除等功能,而使用Eureka可以将两个模块注册至服务中心,使模块之间可以完成接口的调用。
在这里插入图片描述

1、父工程中定义Spring Cloud的版本

在自己项目的父工程的pom.xml文件中引入依赖:

<dependencyManagement>
    <dependencies>
        
        <!--Spring Cloud-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2、创建Eureka服务器模块

创建Maven模块:guli_eduek
在这里插入图片描述

3、配置Eureka服务器模块pom

<dependencies>
    <!--注册中心-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

在这里插入图片描述

4、配置application.properties

#服务端口(端口自己可以随意定义,尽量避免使用冲突的端口号)
server.port=9002

#是否将自己注册到Eureka服务器中,本身是服务器,无需注册
eureka.client.register-with-eureka=false
#是否从Eureka中获取注册信息
eureka.client.fetch-registry=false
#Eureka客户端与Eureka服务端进行通信的地址
eureka.client.service-url.defaultZone=http://127.0.0.1:${server.port}/eureka/

在这里插入图片描述

5、创建启动类

在启动类上添加注解**@EnableEurekaServer**

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

在这里插入图片描述

6、启动Eureka注册中心并在浏览器中访问

http://localhost:9002

在这里插入图片描述
System Status:系统信息

DS Replicas:服务器副本

Instances currently registered with Eureka:已注册的微服务列表

General Info:一般信息

Instance Info:实例信息

8、健康监控的路由

http://localhost:9002/actuator

http://localhost:9002/actuator/health

三、服务注册

在你需要进行服务注册的模块中完成以下三步配置

1、客户端配置pom

在需要进行服务注册的模块的pom.xml文件中配置Eureka客户端的pom依赖

<!--服务注册-->
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在这里插入图片描述

2、添加服务配置信息

配置application.properties,在客户端微服务中添加注册Eureka服务的配置信息

#指定注册中心地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8002/eureka/
#eureka服务器上获取的是服务器的ip地址,否则是主机名
eureka.instance.prefer-ip-address=true

在这里插入图片描述

3、添加Eureka客户端注解

在客户端微服务启动类中添加注解

@EnableEurekaClient

在这里插入图片描述

4、启动客户端微服务

启动注册中心

启动已注册的微服务,可以在Eureka注册列表中看到被注册的微服务

在这里插入图片描述

四、Feign

1、基本概念

  • Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
  • Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
  • Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。

五、实现服务调用

在这里插入图片描述

在这里插入图片描述

将eduservice模块和eduvod模块同时在注册中心注册后,eduservice模块需要调用eduvod模块中删除视频的相关方法,如何实现自己项目中不同微服务之间的调用

1、在调用端添加pom依赖

在guli_eduservice微服务中添加

<!--服务调用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

在这里插入图片描述

2、在调用端的启动类添加注解

@EnableFeignClients

在这里插入图片描述

3、创建包和接口

创建client包

@FeignClient注解用于指定从哪个服务中调用功能,名称与被调用的服务名保持一致

@GetMapping注解用于对被调用的微服务进行地址映射

@PathVariable注解一定要指定参数名称,否则出错

@Component注解防止,在其他位置注入CodClient时idea报错

package com.guli.edu.client;

@FeignClient("guli-vod")
@Component
public interface VodClient {
    @DeleteMapping(value = "/admin/vod/video/{videoId}")
    public R removeVideo(@PathVariable("videoId") String videoId);
}

在这里插入图片描述

guli_eduvod微服务中的接口
在这里插入图片描述

4、调用微服务

在调用端的VideoServiceImpl中注入VodClient,就可以调用client中的方法

在这里插入图片描述

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值