服务注册发现

一、Eureka

1. 概念

1.1 服务治理

  • SpringCloud 封装了Netflix公司开发的Eureka 模块来实现服务治理【SpringCloud抄的Netflix作业】
  • 在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,所以服务之间依赖关系,可以实现服务调用,负载均衡,容错等,实现服务发现与注册

    1.2 什么是服务注册与发现

  • Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,他是服务注册中心,而系统中的其他微服务,使用Eureka Server并维持心跳连接,这样系统的维护人员就可以通过Eureka Server来监控系统中各个微服务是否正常运行

  • 在服务注册与发现中,有一个注册中心,当服务器启动时,会把当前自己服务器的信息比如服务地址通讯地址等以别名方式注册到注册中心中,另一方(消费者|提供者),以该别名的方式去注册中心获取到实际的服务通讯地址,然后再实现本地RPC调用RPC远程调用框架核心设计思想:在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。在任何RPC远程框架中,都会有一个注册中心(存放服务地址相关信息[接口地址])

分布式组件-SpringCloud - 图2
ServiceProvider注册到EurekaServer
Service Consumer 会先找到EurekaServer 获取需要调用的服务地址,然后在调用ServiceProvider

1.3 Eureka包含的两个组件

Eureka Server提供服务注册服务

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

Eureka Client 通过注册中心进行询问

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

2. 单机Eureka搭建

本版本使用的是JDK8 进行创建,如果使用JDK高版本可能会启动报错,原因是JDK高版本对一些类 进行了删除

image.png

2.1 建module

2.2 改pom

Eureka1 和 Eureka2 的依赖对比

  1. <!-- 以前的老版本,分不清client 还是server -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-eureka</artifactId>
  5. <version>1.4.7.RELEASE</version>
  6. </dependency>
  7. <!-- 现在的新版本 -->
  8. <dependency>
  9. <groupId>org.springframework.cloud</groupId>
  10. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  11. <version>3.0.2</version>
  12. </dependency>

2.3 Yaml配置文件

  1. server:
  2. port: 7001
  3. eureka:
  4. instance:
  5. hostname: localhost
  6. client:
  7. # 不需要将自己注册进Eureka注册中心
  8. register-with-eureka: false
  9. # 表示自己就是服务中心,职责是维护服务实例,并不需要检索服务
  10. fetch-registry: false
  11. service-url:
  12. #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
  13. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

2.4 主启动类

  1. @SpringBootApplication
  2. @EnableEurekaServer
  3. public class EurekaMain7001 {
  4. public static void main(String[] args) {
  5. SpringApplication.run(EurekaMain7001.class,args);
  6. }
  7. }

远程调用

OpenFeign(参考谷粒学院)

1. 简介

Feign 是一个声明式的 HTTP 客户端,它的目的就是让远程调用更加简单。Feign 提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,就可以定义好 HTTP 请求的参数、格式、地 址等信息。 Feign 整合了 Ribbon(负载均衡)和 Hystrix(服务熔断),可以让我们不再需要显式地使用这 两个组件。 SpringCloudFeign 在 NetflixFeign 的基础上扩展了对 SpringMVC 注解的支持,在其实现下,我 们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。简化了 SpringCloudRibbon 自行封装服务调用客户端的开发量 。

2. 使用

比如会员服务调用优惠价服务,那么只需要在会员服务里面引用openfeign就具有了远程调用别的服务能力

1.引入依赖

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>

2. 开启远程调用功能

启动类上加注解

  1. @EnableFeignClients

3. 声明远程接口

编写一个接口,告诉SpringCloud这个接口需要调用远程服务

  • @FeignClient(“注册中心服务注册的名字”)
  • 复制被调用接口的完整签名(方法返回值,方法名,参数)
  • PostMapping 路径要写全
    1. @FeignClient("gulimall-ware")
    2. public interface WareFeignService {
    3. @PostMapping("/ware/waresku/skus")
    4. public Resp<List<SkuStockVo>> skuWareInfos(@RequestBody List<Long> skuIds);
    5. }