欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springboot集成Eureka服务注册与发现

程序员文章站 2024-03-23 13:16:46
...


git 地址
https://github.com/a18792721831/studySpringCloud.git

1. Eureka简介

1.1 什么是Eureka

和 Consul、Zookeeper类似,Eureka 是一个用于服务注册和发现的组件,最开始主要应用于亚马逊公司旗下的云计算服务平台 AWS。Eureka 分为 Eureka Server和 Eureka Client,Eureka Server 为Eureka 服务注册中心,Eureka Client 为 Eureka客户端。

1.2 Eureka的基本架构

Eureka的基本架构主要包括以下3种角色。

  • Register Service:服务注册中心,它是一个Eureka Server,提供服务注册和发现的功能。
  • Provider Service:服务提供者,它是一个 Eureka Client,提供服务。
  • Consumer Service:服务消费者,它是一个Eureka Cient,消费服务。

服务消费的基本过程如下:首先需要一个服务注册中心 Eureka Server,服务提供者 Eureka
Client 向服务注册中心 Eureka Server注册,将自己的信息(比如服务名和服务的IP地址等)
通过 REST API 的形式提交给服务注册中心 Eureka Server。同样,服务消费者 Eureka Client 也
向服务注册中心 Eureka Server注册,同时服务消费者获取一份服务注册列表的信息,该列表
包含了所有向服务注册中心 Eureka Server注册的服务信息。获取服务注册列表信息之后,服
务消费者就知道服务提供者的IP地址,可以通过Http远程调度来消费服务提供者的服务。

2. Eureka Server

2.1 创建Eureka Server

springboot集成Eureka服务注册与发现
springboot集成Eureka服务注册与发现

2.2 配置gradle

springboot集成Eureka服务注册与发现
其项目结构如上图,.gradle和build的文件夹不需要进行手动创建。
我们使用gradle warpper
springboot集成Eureka服务注册与发现
然后修改maven仓库地址

repositories {
    maven{
        url 'https://maven.aliyun.com/'
    }
    maven{
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
    maven{
        url 'https://repo1.maven.org/maven2/'
    }
    mavenCentral()
}

springboot集成Eureka服务注册与发现
然后等待重新构建(刚创建成功,gradle会从maven的默认仓库下载依赖,此时下载非常慢,可以手动终止,等待我们添加了其他的仓库后重新刷新下载依赖。效果很明显,使用默认仓库下载一个jar在十几几十秒,但是使用国内的仓库,下载一个jar包只需要不到1秒)

2.3 配置Eureka

创建配置文件application.yml,在resources下
springboot集成Eureka服务注册与发现

server:
  port: 8761

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: false

logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  • 8761是端口(tomcat启动的端口,对外服务的端口)
  • 127.0.0.1表示eureka访问的域名
  • 因为我们构建的是eureka服务端,所以,eureka Server不需要进行注册,而是eureka Client向eureka Server 进行注册的,所以需要关闭注册。即 register-with-eureka和fetch-registry为false
  • defaultZone是eureka主面板访问地址。其值进行变量替换后就是http://127.0.0.1:8761/eureka/
  • enable-self-preservation设置为false是关闭其自我保护机制(后面有说明)
  • logging是配置tomcat日志打印级别,默认打印信息较少,无法打印tomcat容器发布了哪些接口,但是设置为较详细的日志级别,可以打印发布哪些接口,这样就可以从日志中看出我们的controller是否发布成功
  • feemarker是重中之重,因为eureka刚创建成功时,去访问主面板是无法访问的,从官网的issues看,是认为gradle的缓存问题。不过网上有人说增加这些配置,可以解决这一问题。我没有深入,只是配置这个之后,重新刷新gradle构建,确实可以访问了。
    接下来在启动类增加eureka server的注解
    @EnableEurekaServer
    springboot集成Eureka服务注册与发现

2.4 启动eureka server

springboot集成Eureka服务注册与发现
然后在浏览器验证
springboot集成Eureka服务注册与发现
提示没有开启自我保护机制,而且,其注册的eureka client也是空的。

3. Eureka Client

3.1 创建 Eureka Client

springboot集成Eureka服务注册与发现
springboot集成Eureka服务注册与发现
springboot集成Eureka服务注册与发现
然后与2.2同样进行配置gradle(这里其实可以将仓库配置到root的gradle中,但是貌似不生效,不知道为什么,存疑,后续研究gradle时解决。)

3.2 配置Eureka

springboot集成Eureka服务注册与发现

server:
  port: 8762

eureka:
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/


logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  application:
    name: eureka-client-test
  • 在 eureka client中需要注销注册,默认开启,因为eureka client需要向eureka server进行注册的。
  • defaultZone就是eureka server的注册地址
  • application:name是eureka client在eureka server面板中展示的名称
    其余配置与eureka server配置相同。
    当然,其注解是client
    springboot集成Eureka服务注册与发现

3.3 启动eureka client

请注意,如果需要同时启动多个tomcat容器在一个idea中,需要在run dash board面板中。
springboot集成Eureka服务注册与发现
正常情况下,会自动弹出提示,配置是否展示run dashboard。如果没有弹出,请百度。
此时刷新eureka面板
springboot集成Eureka服务注册与发现

3.4 eureka client 服务发布者

在eureka中有三个角色:
eureka server
eureka client 服务发布者(服务提供者)
eureka client 服务消费则(服务调用者)

我们创建了eureka server和一个eureka client,并且需要将这个eureka client作为服务提供者,对外提供接口。
所以,我们需要创建controller
springboot集成Eureka服务注册与发现
controller提供了两个接口,分别是hi和hello接口,返回String,并且get访问
springboot集成Eureka服务注册与发现
接口自测
springboot集成Eureka服务注册与发现
springboot集成Eureka服务注册与发现

4. eureka的一点思考

在学习eureka的时候,我学习到这里,其实有一个疑问,我们创建了eureka server,eureka client并且提供了两个接口。那么,eureka cleint的调用者呢。
就是我们创建了对外接口,并且将对外接口以及接口服务器的信息放到了eureka server中,且所有的eureka集群都有这些信息,那么是怎么调用的呢?
这一块在后面的一个框架中,这个框架暂时实现了,提供一个平台,用于服务器的注册,以及相关信息的记录,并保证所有的服务器信息共享。
调用的是Ribbon,Ribbon使用服务器信息进行远程调用,当然,远远不止,一些网关路由,负载均衡,熔断机制,都和服务注册与发现有关。
这里存疑。